Bash
當我在沒有變數的情況下直接使用條件時,為什麼條件不起作用?
這給了我一個錯誤,說參數太多:
if [ $( file -b $i ) == "directory" ]
但是當我嘗試這個時
name=$( file -b $i ) if [ name == "directory" ]
它似乎工作得很好。
有人可以解釋這一點或在文件中指出解釋嗎?
幾個問題:
]
表示[
(test
) 的參數結束,它必須是最後一個參數;你有幾個]
s,這是錯誤的;大概你打算使用:if [ $( file -b $i ) == "directory" ]
- 如果你使用了上面的方法,你會得到
bash: [: too many arguments
,因為分詞將在變數擴展 ($i
) 的輸出上進行,然後是命令替換$()
(file
command) ,並且[
會在 之前看到多個單詞=
,從而導致錯誤消息。您需要引用變數擴展和命令替換:[ "$(file -b "$1")" == "directory" ]
作為旁注,您應該使用
bash
關鍵字[[
,而不是[
前者將為您處理分詞(和路徑名擴展)。