本文介绍Linuxbashshell中使用$获取变量值时是否加双引号或大括号。使用$获取变量值时是否加双引号在bashshell脚本中,使用$获取变量值时,有的不加双引号,比如$arg。有些是双引号,例如“$arg”。下面详细解释这两种形式的区别,什么情况下要加双引号,什么情况下不能加双引号。在bash中,参数默认是分开的。当参数值本身包含空格时,如果参数值没有用双引号括起来,可能会将参数值扩展成多个参数值,而失去原来的完整值。具体例子如下:$functiontest_args(){echo\$\#:$#;先回声:$1;回声第二:$2;}$args="ThisisaTest"$test_args$args$#:4first:Thissecond:is$test_args"$args"$#:1first:ThisisaTestsecond:这里定义了一个test_args函数来打印传入的$1和$2参数值。给定args变量指定的字符串包含空格。可以看出,在执行test_args$args时,args变量的值被空格分隔成四个参数。在执行test_args"$args"时,args变量的值保持不变,被当作参数。用双引号将字符串括起来,以避免由空格引起的单词拆分。即当我们需要保持变量本身的值不变,不想通过空格扩展成多个参数时,这时就需要用双引号括起来。在向脚本或函数传递参数时,我们可能不确定获取的参数值是否包含空格。为避免因空格和参数个数变化导致意外的分词,建议传递参数时每个参数都用双引号括起来。用$获取变量值需要用大括号在bashshell脚本中,用$获取变量值时,有一些是不用大括号的,比如$var。有的加大括号,比如${var}。下面详细解释这两种形式的区别,什么情况下要加括号,什么情况下不能加括号。检查manbash中${parameter}表达式的含义如下:${parameter}parameter的值被替换。当参数是一个多于一位的位置参数,或者当参数后跟一个不被解释为它的名称的一部分的字符时,大括号是必需的。参数是shell参数或数组引用(Arrays)。即花括号{}用来将花括号内的字符串限制为一个整体,不会跟相邻的字符组合成其他含义。比如有一个var变量,它的值为“Say”,现在你要打印这个变量值,然后打印“Hello”字符串,也就是打印出“SayHello”字符串。那么获取var变量值的语句和“Hello”字符串之间不能有空格,否则echo命令会把这个空格一起打印出来。但是写成$varHello并没有达到预期的效果。具体例子如下:$var="Say"$echo$varHelloSayHello$echo$varHello$echo${var}HelloSayHello$echo"$var"HelloSayHello可以看到$varHello的写法打印出来了"说”“你好”之间有一个空格,这不是想要的结果。而$varHello打印为空,其实就是获取varHello变量的值。该变量未定义,默认值为空。${var}Hello打印想要的结果,用{}把var括起来,并且明确指定要获取的变量名是var,以免混淆。"$var"Hello用双引号把$var括起来,也可以和后面的"Hello"字符串区分开来。即在使用$获取变量值时,如果变量名后跟空白字符分隔其他内容,可以不用花括号将变量名括起来。如果变量名后面直接跟其他不属于变量名本身的字符,则需要用大括号将变量名括起来,以明确变量名。
