1. ホーム
  2. bash

[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。

2022-01-27 02:15:20

質問

このスクリプトはエラーになります。

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

解決するには?

Bashをいつも使うことがわかっている場合は、常に二重括弧の条件付き複合コマンドを使用する方がはるかに簡単です [[ ... ]]POSIX互換のシングルブラケット版ではなく [ ... ]. の中は [[ ... ]] 複合語の場合、単語分割やパス名展開は適用されないので、単語分割やパス名展開に依存することができます。

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

の値を比較する。 $aug1 という文字列と {コード .

を使用する場合 andのように、変数をダブルクォートで囲むことを忘れないようにしましょう。

[ ... ]

変数の展開を引用せず、変数が未定義または空である場合、その変数は犯罪現場から消え、次のものだけが残ります。

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

という構文がありますが、これは有効な構文ではありません。(また、以下の場合は別のエラーメッセージで失敗します。 if [ = "and" ]; に空白文字やシェルのメタキャラクタが含まれていた場合)。

現代の $aug1 演算子には、正規表現のマッチングをはじめ、他にも多くの優れた機能があります。