引用或不引用,即<q-word-not-allowed-in-titles> </q-word-not-allowed-in-titles>

时间:2013-04-28 11:04:44

标签: shell posix double-quotes sh

当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令牌后面的字词

此列表是否完整?我确定不是。

1 个答案:

答案 0 :(得分:0)

除了你列出的内容之外,我只是遇到了双括号 chepner pointed out

$ set bird dog mouse

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

Herestrings

也可以引用引号
$ cat <<< $*
bird dog mouse

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

with a modified IFS

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

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