当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
令牌后面的字词此列表是否完整?我确定不是。
答案 0 :(得分:0)
除了你列出的内容之外,我只是遇到了双括号 chepner pointed out
$ set bird dog mouse
$ [[ $* = 'bird dog mouse' ]]; echo $?
0
Herestrings
也可以引用引号$ cat <<< $*
bird dog mouse
$ cat <<< "$*"
bird dog mouse
$ IFS=: cat <<< $*
bird dog mouse
$ IFS=: cat <<< "$*"
bird:dog:mouse