1

私はこのスクリプトを書きました:

#!/bin/sh

DEVICE=`sysctl hw.machine`

if [ $DEVICE = "hw.machine: iPhone3,1" ]
 then
  echo "Test Done"
 else
  echo "Test failed"
fi

実行した後、メッセージが表示されます。./test: line 5: [: too many argumentsなぜ機能しないのですか?

4

1 に答える 1

1

あなたは常にあなたの拡張を引用するべきです。[テストコマンドのエイリアスです。他のコマンドと同じように、引数を取ります。$ DEVICE変数は、コマンドを実行する前に展開されます。

$ DEVICEに空白が含まれている場合、コマンドは次のようになります。

[ foo bar = "hw.machine: iPhone3,1" ]

この例testでは、比較演算子「=」の前に引数「foo」と「bar」を取得しています。

拡張を引用する必要があります:

if [ "$DEVICE" = "hw.machine: iPhone3,1" ]

もう1つの注意点は[[、bashで使用する場合、単語の分割は。内では発生しないため、これは問題ではないということです[[

見積もりの​​詳細については、以下を参照してください:http: //mywiki.wooledge.org/Quotes

于 2012-07-09T20:01:53.057 に答える