Linux Shell字符串变量拼接与赋值的使用

目录
  • 1.字符串拼接
  • 2.定义值为双引号或单引号的字符串
  • 3.在单引号和双引号字符串中取变量值

最近在工作用到shell脚本,用到了字符串变量的拼接,同时需要对字符串进行赋值,这里与大家分享一下,

1.字符串拼接

shell脚本里面可以对字符串进行拼接,并且可以将拼接后的值赋予给另外一个变量,下图给出了几种字符串拼接的样例,供大家参考。

#!/bin/bash
a="123"  # 定义a变量为"123"
b="456"  # 定义b变量为"456"
first=$a$b  # 第一种方式来拼接字符串:直接取2个值,将变量值拼接
echo $first
second="$a$b" # 第二种方式来拼接字符串:在2个变量值最外面加字符串
echo $second
third="${a}${b}" # 第三种方式拼接字符串:和第二种类似,就是加${}来进行变量取值。
echo $third

执行上面的脚本,可以看到脚本的执行结果,这3种方式执行的结果是一样的,上述3种均可拼接字符串:

123456
123456
123456

2.定义值为双引号或单引号的字符串

我们知道在shell中单引号和双引号有着特殊的含义,两者也是有区别的,但是如何才能定义一个字符串,使得字符串本身的值包含双引号或者单引号呢,下面的代码,我们给出了示例:

#!/bin/bash
a="\"\""
b="'''"
c='""'
d=''''
echo $a
echo $b
echo $c
echo $d

执行上面的脚本,我们可以看到脚本的执行结果:

"" # 变量a的值为2个双引号
‘’‘ # 变量b的值为3个单引号
“” # 变量c的值为2个单引号
   # 变量d的值为空

看到上面的执行结果,我们大致也明白了如何才能定义值为双引号或者单引号的字符串了,下面分享一下我总结的技术知识点:

定义值为双引号的字符串的方法有2种:
1.1 定义变量时,在最外层使用双引号,在双引号内部使用 \ 来对双引号进行转义,类似于变量a的定义方式。
1.2 定义变量时,在最外层使用单引号,在单引号内部直接写双引号来进行定义,类似于变量c的定义方式。
定义值为单引号的字符串方法:在最外层使用双引号,在双引号的内部直接写单引号来进行定义,类似于变量b的定义方式。

上述只是我总结的一些知识点,肯定有遗漏的地方或者其他方法,欢迎各位补充。其实,至于为什么会出现上述情况,个人认为其根本原因在于,shell脚本中单引号与双引号的作用不同。,感兴趣的人可以自行百度,正是两者的区别才导致出现来上述的情况。

3.在单引号和双引号字符串中取变量值

shell中使用单引号和双引号的区别导致了在单引号和双引号变量中取值的不同,下面,下面我们首先来看一个例子,为大家解释下两者的不同:

#!/bin/bash
name="test"
a='{
  "name":$name,
  "age":"45"
}'
b="{
  "name":$name,
  "age":"45"
}"
echo $a
echo $b

执行上面一段shell脚本,可看到输出的结果:

{ "name":$name, "age":"45" } # 这是a的值
{ name:test, age:45 } # 这是b的值

通过上面的执行结果,我们可以看到以下几个问题:

  • 变量a的定义与变量b的定义,唯一的区别在于a是单引号,b是双引号。
  • 变量a的值并没有将name变量的值取出,变量b将name的值取出。
  • 变量a中定义的属性名均带有双引号(例如:“name”), 变量b的值定义的属性名并没有带双引号(例如:name)

那么如何解决上述的第二个和第三个问题呢,首先来看第2个问题,下面给出我的一种解决方式:

在单引号定义的字符串里面,如果想要取到变量的值,需要在变量值上再加一层单引号

下面我们对之前的变量a的定义做一个改造,给出一个示例来说明结果.

#!/bin/bash
name="test"
a='{
  "name":'$name',   ---> 这里给a的定义多加了一层单引号
  "age":"45"
}'
b="{
  "name":$name,
  "age":"45"
}"
echo $a
echo $b

再次执行上面的结果,我们可以看到执行结果:

{ "name":test, "age":"45" }
{ name:test, age:45 }

可以看到执行的结果,在变量a中,变量name的值确实被取出来,已进行赋值。

接下来,我们来看第3个问题,就是如何给变量b的属性名加双引号,这个问题的解决方法,类似于我们第二节中,如何定义值为双引号或者单引号的字符串。这里给出我的一个解决方法:利用转义字符。 下面给出我的示例:

name="test"
a='{
  "name":'$name',   ---> 这里给a的定义多加了一层单引号
  "age":"45"
}'
b="{
  "\"name\"":$name,  ---> 给每个属性值的双引号都加上了转义字符
  "\"age\"":"\"45\""
}"
echo $a
echo $b

执行上面的结果,我们可以看到执行结果为:

{ "name":test, "age":"45" }
{ "name":test, "age":"45" }

可以看到两者的值保持一致,我们可以得出以下结论:

  • 虽然两者实现了相同的功能,但是发现使用双引号的定义比较繁琐,使用单引号定义的方式比较简便。
  • 在使用单引号定义时,要注意如果要取某个变量的值,要在变量值上加单引号来取变量值。
  • 在使用双引号定义时,如果想正常显示双引号,需要使用转义字符来定义双引号。

到此这篇关于Linux Shell字符串变量拼接与赋值的使用的文章就介绍到这了,更多相关Shell字符串变量拼接与赋值内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解shell 变量的高级用法示例

    变量删除和替换 案例:从头开始匹配,将符合最短的数据删除 (#) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${variable_1#*ov} echo $variable_2 案例:从头开始匹配,将复合最短的数据删除(##) varible_3=${variable_1##*ov} echo $varible_3 案例:替换字符串,只替换第一次匹配成功的(/) echo $PATH var6

  • shell判断变量是否含某个字符串的6种方法

    目录 方法一:利用grep查找 方法二:利用字符串运算符 方法三:利用通配符 方法四:利用case in 语句 方法五:利用替换 方法六:利用expr,如果包含会返回位置 方法一:利用grep查找 strA="long string" strB="string" result=$(echo $strA | grep "${strB}") if [[ "$result" != "" ]] then echo

  • Shell特殊变量(Shell $#、$*、$@、$?、$$)的使用

    上节我们讲到了 $n,它是特殊变量的一种,用来接收位置参数.本节我们继续讲解剩下的几个特殊变量,它们分别是:$#.$*.$@.$?.$$. Shell 特殊变量及其含义 变量 含义 $0 当前脚本的文件名. $n(n≥1) 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是 $1,第二个参数是 $2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. $@ 传递给脚本或函数的所有参数.当被双引号" "包含时,$@ 与 $* 稍有不同,我们将

  • Shell eval通过变量获取环境变量的方法实现

    场景 系统中存在环境变量 USER=iceber 脚本中存在一个变量 env_name=USER 需要通过变量 env_name 获取到环境变量 USER 的值 错误示例 $ # 环境中已存在环境变量 USER $ env_name=USER $ echo ${$env_name} ${$env_name}: bad substitution 很显然,直接使用 $ 嵌套来获取值是行不通的 正确示例 $ # 环境中已存在环境变量 USER $ env_name=USER $ eval echo '

  • shell脚本中整数型变量自增(加1)的几种实现

    在shell脚本中,有时为了计数,需要编写整数型变量,并用自增来显示. shell脚本中的整数型变量,自增有多种实现方式,整体测试脚本如下: #!/bin/sh #本脚本测试shell脚本中整型变量自增 加1的几种方法 #定义整型变量 a=1 echo $a #第一种整型变量自增方式 a=$(($a+1)) echo $a #第二种整型变量自增方式 a=$[$a+1] echo $a #第三种整型变量自增方式 a=`expr $a + 1` echo $a #第四种整型变量自增方式 let a+

  • Shell全局变量、局部变量与特殊变量的具体使用

    目录 1.全局变量(环境变量): 2.局部变量(本地变量): 3.关于局部变量的其它一些问题 4.Shell的特殊变量: 变量类型:全局变量(环境变量)和局部变量(本地变量)环境变量可以在定义它们的shell及其派生出来的任意子进程的shell中使用.局部变量只能在定义它们的函数/脚本中使用.还有一些变量是用户创建的,其他的则是专用的shell变量. 1.全局变量(环境变量): 环境变量可用于定义shell的运行环境,环境变量可以在配置文件中定义与修改,也可以在命令行中设置,但是命令行中的修改操

  • 详解shell 变量

    1.简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell变量也遵循这个规则. 在Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同.如C/C++ ,变量分为整数.浮点数.字符串.布尔等多种类型.当然,如果有必要

  • linux shell字符串截取的详细总结(实用!)

    目录 一.字符串变量的截取操作 1.从指定位置(index)截取固定长度 2.截取指定字符串(子字符串)左边的字符 3.截取指定字符串(子字符串)右边的字符 二.用cut命令截取(适合处理管道流或行文本字符) 补充:使用%和%%:截取的是指定字符前边内容 总结 一.字符串变量的截取操作 对字符串变量的截取操作一般都是通过${操作符}的方式进行,如下: 1.从指定位置(index)截取固定长度 格式:${string:start:length} 其中,string 是要截取的字符串,start 是

  • 判断Linux Shell环境变量是否存在

    #!/bin/bash if [ 0"$PATH" = "0" ]; then echo "not found" else echo $PATH fi 比如这里判断环境变量PATH是否存在,存在这输出该环境变量,不存在则输出 not found 在方括号的两侧都有空格,在-f.-lt.=等符号两侧同样也有空格.如果没有这些空格,Shell解释脚本的时候就会出错. 以上所述是小编给大家介绍的Linux Shell 判断环境变量 是否存在,希望对大家

  • linux shell 字符串操作(长度,查找,替换)详解

    在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略启动外部程序等时间,因此速度会非常的快. 一.判断读取字符串值 表达式 含义 ${var} 变量var的值, 与$var相同     ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有被声明, 或者其值为空, 那

  • linux shell字符串内置的常用操作(获取长度、查找、替换)

    之前我们也发过相关的文章.这里呢,推荐大家使用一些内置的函数. 在编写shell程序时,经常会涉及到字符串相关操作.有许多命令语句,如awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号,能够达到相似效果,使用内部操作符会省略启动外部程序等时间,因此速度会很的快.如果内置的操作符能够做到的,优先使用内置的. 1 读取字符串值 表达式 含义 ${var} 变量var本来的值 ${var-default} var没声明返回default,但不改变var的值 ${var:-def

  • Shell判断字符串变量是否为空的方法实现

    目录 Bash Shell 判断一个变量是否为空 检查bash shell变量是否为空的另一个方式 您可以将 -z 选项传递给 if 命令或条件表达式.如果STRING的长度为0,variable ($var)为空.test命令用于检查文件类型并比较值.这个页面显示了如何使用test命令确定bash shell变量是否为空. 判断 bash 变量是否为空: 要点:变量两端用双引号括起来 如果bash变量未设置或设置为空字符串,则返回true: if [ -z "$var" ]; 另一个

  • python文件读写操作与linux shell变量命令交互执行的方法

    本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

  • Linux Shell脚本系列教程(三):变量和环境变量

    一.玩转变量和环境变量 变量是任何一种编程语言都必不可少的组成部分,用于存放各种类型的变量.脚本语言大多是弱类型语言(动态语言),也就是说在使用变量时,不需要事先声明变量的类型,只需要直接赋值就可以.在Bash中,每一个变量的值都是字符串.无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.有一些特殊的变量会被shell环境和操作系统保留,用来存储一些特别的值,这类变量就称为环境变量,相信大家对环境变量也并不陌生,因为即使在windows操作系统上,也存在环境变量. 二.普通变量 普通变

  • Linux Shell 生成随机数和随机字符串的方法示例

    日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票.丢骰子.抽签.年会抽奖等. Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法. 计算机产生的的只是"伪随机数",不会产生绝对的随机数(是一种理想随机数).实际上,伪随机数和理想随机数也是相对的概念,例如伪随机数在1万万亿亿亿年内也无法重复,算是理想随机数么? 伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产生算法将可以产生一个非常长的不重复的序列,例如 UUID

  • linux shell脚本对未定义变量的判断以及if的用法详解

    环境 操作系统:win10 虚拟机:centos7 需求 因为公司有个脚本,是用于启动程序的,但是每次启动都要手动做如下两个操作: ①先查询之前的进程ID ②杀死之前的,在启动新了 时间长了弄得我很烦躁,所以就琢磨下,把上面的的操作一起整合到启动脚本里去. 最开始我是这么写的: #!/bin/bash echo "ggjob-search..." pid=`ps -ef|grep -w ggjob-search|grep -v grep|grep -v ggjob-search.sh|

  • linux shell中Grep命令查找多个字符串(grep同时匹配多个关键字或任意关键字)

    目录 前言 1.Grep命令搜索多个字符串 2.grep同时匹配多个关键字或任意关键字 2.1与操作 2.2 或操作 2.3其他操作 附:grep参数说明 总结 前言 grep 命令支持三种正则表达式语法:Basic.Extended 和 Perl-compatible .当没有指定正则表达式类型时,grep 命令将搜索模式默认为基本正则表达式. 要搜索多个匹配模式,可以使用 OR ( alternation ) 运算符.我们可以用 OR 运算符 |( pipe )指定不同的匹配项,这些匹配项可

随机推荐