在 shell 编程时,我们需要注意正确的引用,因此参数扩展在扩展中的空白方面做正确的事情,或者防止分词妨碍。典型示例是名称中带有空格的文件:
DIR="My Documents"
cd $DIR # Tries to "cd My".
cd "$DIR" # Works.
有趣的是,其他地方不需要引号,因为没有执行分词:
SAVE_DIR=$DIR # Assigns "My Documents", not just "My".
case $DIR in
(My Documents) printf 'My Documents\n';; # This is output.
(My) printf 'My\n';;
esac
但这又失败了:
test $DIR = "My Documents" # Error: condition expected: My
当然,我们可以提出一个硬性规定,例如始终对参数扩展进行双引号。但为了每天变得更聪明,
双引号什么时候是可选的?到目前为止我可以看到
- 在变量赋值中(仅使用单个扩展)
- 作为
case
记号后面的词
这份清单是否完整?我确定不是。