Bash の if 条件で「単項演算子が必要です」というエラーが発生する 質問する

Bash の if 条件で「単項演算子が必要です」というエラーが発生する 質問する

このスクリプトにエラーが発生しています:

elif [ $operation = "man" ]; then
    if [ $aug1 = "add" ]; then         # <- Line 75
    echo "Man Page for: add"
    echo ""
    echo "Syntax: add [number 1] [number 2]"
    echo ""
    echo "Description:"
    echo "Add two different numbers together."
    echo ""
    echo "Info:"
    echo "Added in v1.0"
    echo ""
elif [ -z $aug1 ]; then
    echo "Please specify a command to read the man page."
else
    echo "There is no manual page for that command."
fi

次のエラーが発生します:

calc_1.2: line 75: [: =: unary operator expected

ベストアンサー1

常にBashを使うことが分かっている場合は、[[ ... ]]POSIX互換の単一括弧バージョンではなく、二重括弧条件複合コマンドを常に使用する方がはるかに簡単です[ ... ][[ ... ]]複合コマンド内では、単語分割とパス名展開は単語には適用されないので、

if [[ $aug1 == "and" ]];

の値を$aug1文字列と比較しますand

を使用する場合は[ ... ]、次のように変数を二重引用符で囲むことを常に覚えておく必要があります。

if [ "$aug1" = "and" ];

変数展開を引用符で囲まず、変数が未定義または空の場合、その変数は犯罪現場から消え、

if [ = "and" ];

$aug1これは有効な構文ではありません。(空白やシェルのメタ文字が含まれている場合も、別のエラー メッセージが表示されて失敗します。)

最新の[[演算子には、正規表現のマッチングなど、他にも多くの優れた機能があります。

おすすめ記事