0

私はスクリプトを持っていますtest.sh

OUTPUT_FILE="$1"; shift || { echo "require arg1: output file path"; exit 1; }

しかし、./test.sh引数なしで実行すると、出力されません出力require arg1: output file pathshift: nothing to shift

誰が理由を教えてくれますか?

私のアッシュ環境: Busybox Android 2.2~4.4

4

1 に答える 1

1

問題を再現できませんが、原因は明らかです。十分なパラメーターが指定されていない場合、スクリプトの実行を続行するために、シフトは終了値としてエラーを発生させませんが、それ以外の場合はその条件を黙って無視します。代わりに、独自のエラーを出力し、それ以降のスクリプトの実行を終了します。

シフトに依存してその終了値を生成するのではなく (あなたのものではないようです)、シフトするために残されたパラメーターについてコマンドラインをテストすることを考えることができます。

echo "${#@}"

残りの (まだシフトされていない) コマンド ラインの長さを示します。0 の場合は、警告メッセージが必要です。bash はコマンド ライン パラメータの数を生成しますが、busybox ash はコマンド ラインに残っている文字数をカウントすることに注意してください。

あるいは。$1 が空かどうかをテストします。

[ -z "$1" ] && echo "no args"
于 2014-07-21T06:45:46.327 に答える