我是否应该在 shell 脚本中用引号括住变量?
例如,一下两个脚本的区别是啥?
xdg-open $URL
[ $? -eq 2 ]
xdg-open "$URL"
[ "$?" -eq "2" ]
一般规则:如果参数可以为空或包含空格(或任何空格)或特殊字符(通配符),则将其括起来。不将带空格的字符串括起来通常会导致 shell 将单个参数拆分成多个参数。
假设 script.sh内容是显示第1个参数
# script.sh
echo $1
name="hello word"
# 下面的命令将输出 hello
./script.sh $name # 等价于 ./script.sh hello word 传递两个参数给脚本 script.sh,输出结果是 hello
# 下面的命令将输出 hello word
./script.sh "$name" # 等价于 ./script.sh "hello word" 传递了1个参数给脚本 script.sh,输出结果是 hello word
$?
不需要引号,因为它是数值。$URL
是否需要,取决于里面是否有空字符,如果有空字符仍需要参数引号。我倾向于总是出于习惯而引用字符串,因为这样更安全。