Bash

當我在沒有變數的情況下直接使用條件時,為什麼條件不起作用?

  • January 6, 2019

這給了我一個錯誤,說參數太多:

if [ $( file -b $i ) == "directory" ]

但是當我嘗試這個時

name=$( file -b $i )
if [ name == "directory" ]

它似乎工作得很好。

有人可以解釋這一點或在文件中指出解釋嗎?

幾個問題:

  • ]表示[( test) 的參數結束,它必須是最後一個參數;你有幾個]s,這是錯誤的;大概你打算使用:
if [ $( file -b $i ) == "directory" ]
  • 如果你使用了上面的方法,你會得到bash: [: too many arguments,因為分詞將在變數擴展 ( $i) 的輸出上進行,然後是命令替換$()( filecommand) ,並且[會在 之前看到多個單詞=,從而導致錯誤消息。您需要引用變數擴展和命令替換:
[ "$(file -b "$1")" == "directory" ]

作為旁注,您應該使用bash關鍵字[[,而不是[前者將為您處理分詞(和路徑名擴展)。

引用自:https://unix.stackexchange.com/questions/337476