2014-02-09 75 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(猛砸特有的,但一般適用於整個家庭伯恩殼)

相關問題