如何使用包含空格的$ variable执行命令?

时间:2014-02-09 07:43:44

标签: bash shell scripting terminal

在我的剧本中,我有这一行:

[ -z "$(file $1 | grep '256')" ] && echo 256

如果$ 1包含空格,那么我收到错误消息

line 11: [: too many arguments

如何正确引用它以使其正确运行?

更新:
我错误地粘贴了我脚本中的那一行。此行

的错误消息是正确的
[ -z $(file "$1" | grep '256') ] && echo 256

2 个答案:

答案 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。)