在我的剧本中,我有这一行:
[ -z "$(file $1 | grep '256')" ] && echo 256
如果$ 1包含空格,那么我收到错误消息
line 11: [: too many arguments
如何正确引用它以使其正确运行?
更新:
我错误地粘贴了我脚本中的那一行。此行
[ -z $(file "$1" | grep '256') ] && echo 256
答案 0 :(得分:2)
双引号$1
:
[ -z "$(file "$1" | grep '256')" ] && echo 256
PS:您发布的行不会导致您所指的错误。要么是从其他版本复制了错误,要么在脚本中有另一个错误引用的行。
答案 1 :(得分:1)
在变量周围使用双引号。总是
(嗯,并非总是如此。在某些情况下,您希望shell对某个值执行单词拆分,但这些只是少数,而不是您应该很快就能理解的内容。)
但是,你在那里做的事情可以简单地用
代替file "$1" | grep -o '256'
Shell引用是常见的常见问题解答;它知之甚少,但并不难。参见例如http://mywiki.wooledge.org/Quotes(特定于Bash,但通常适用于整个Bourne系列shell。)