在 Bash 脚本中将字符串内容放在引号中是否重要?考虑以下两个变量:
str1=hei
str2="Hi"
bash 中首选上述哪种定义字符串文字的方法?为什么?
完全没关系。纯粹出于风格原因,许多人会说首选使用引号。bash 中引号的唯一目的是控制分词和变量插值。(和特殊字符......这可能是一个相当长的列表)。由于方程的右侧没有变量也没有特殊字符,因此不需要引号。
考虑以下:
sp='this is a string with spaces'   #1
sp=this' is a st'rin"g wit"h\ spaces  #2 same as #1
v=$sp     #3
v="$sp"   #4  equivalent to #3
v='$sp'   #5  assign literal string $sp
2 和 3 在风格上很糟糕,但完全有效。由于变量赋值中不会发生分词,因此 #3 和 #4 是等效的。带有空格的字符串中双引号的目的是防止分词(也可以通过反斜杠来实现)。也就是说,sp=this is a string将解析为尝试调用is带有参数和 的命令a,并且string环境变量sp设置为 的值this,但使用引号会阻止这种情况。使用双引号而不是单引号的原因是允许变量插值。当字符串既没有变量也没有空格时,根本没有理由(除了样式之外)使用任何引号。
就我个人而言,我觉得过度引用的风格有点过分。除非有人在带有类似命令的交互式提示中使用引号ls "/p/a/t/h",否则我认为没有理由在不需要时使用引号。为了保持一致性,那些提倡使用引号的人应该始终键入"ls" "/p/a/t/h",而且我从来不知道有人会这样引用命令。OTOH,shell 引用规则可能有点神秘(参见上面的#2!),如果有任何疑问,请使用引号。
| 归档时间: | 
 | 
| 查看次数: | 2138 次 | 
| 最近记录: |