-2

在 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记号后面的词

这份清单是否完整?我确定不是。

4

1 回答 1

0

除了您列出的内容外,正如chepner 指出的那样,我只遇到了双括号

$ set bird dog mouse

$ [[ $* = 'bird dog mouse' ]]; echo $?
0

Herestrings 的引号也是可选的

$ cat <<< $*
bird dog mouse

$ cat <<< "$*"
bird dog mouse

除了 修改后的 IFS

$ IFS=: cat <<< $*
bird dog mouse

$ IFS=: cat <<< "$*"
bird:dog:mouse
于 2013-04-29T02:36:18.650 回答