2014-02-09 26 views
1

在我的剧本我有这样一行:

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

如果$ 1包含空格,然后我得到错误信息

line 11: [: too many arguments 

我怎样才能正确地引用这使得它可以正常运行?

更新:
我错误地从脚本中粘贴了该行。该错误消息对此行是正确的

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

回答

2

双引号的$1

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

PS:您发布的行不会导致你指的错误。无论是从另一个版本复制错误,还是脚本中有另一个错误引用的行。

+0

它的工作原理。但我不明白为什么。我认为,1美元左右的报价将会抵消外部报价。你有链接,我可以找到更多关于此? – Rucent88

+1

'$(...)'中的上下文首先被评估,然后处理父shell的引用。 – tripleee

+1

+1为“错误的错误信息”诊断! “ – tripleee

1

在变量周围使用双引号。总是。

(当然,并不总是总是如此。有你想要的外壳上的值进行分词的情况,但这些都是小众而不是你应该期望很快能明白任何时候)。

然而,你在那里做什么可以简单地被替换为

file "$1" | grep -o '256' 

壳牌报价是一个常见的常见问题;它知之甚少,但并不难。见例如http://mywiki.wooledge.org/Quotes(猛砸特有的,但一般适用于整个家庭伯恩壳)

相关问题