変数を使用せずに直接使用すると、条件が機能しないのはなぜですか?

変数を使用せずに直接使用すると、条件が機能しないのはなぜですか?

パラメータが多すぎるというエラーが発生します。

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

しかし、これを試してみました。

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

とてもうまくいくようです。

誰かがこれを説明したり、文書で説明を指摘したりできますか?

ベストアンサー1

いくつかの質問があります:

  • ][は()パラメータの終わりを表しtest、これは複数のsを持つ最後のパラメータでなければなりません。]これはおそらく間違っています。

    if [ $( file -b $i ) == "directory" ]
    
  • 上記の方法を使用すると、変数拡張()とコマンド置換(command)の出力でbash: [: too many arguments単語の分割が実行され、その前に複数の単語が表示され、エラーメッセージが表示されるため、これらのエラーが発生します。変数の拡張とコマンドの置き換えを引用する必要があります。$i$()file[=

    [ "$(file -b "$1")" == "directory" ]
    

参考までに、前者は単語分割(およびパス名拡張)を処理するため、代わりにbashキーワードを使用する必要があります。[[[

おすすめ記事