Bashの条件にパラメータが多すぎる場合

Bashの条件にパラメータが多すぎる場合

私はbashにほとんど最初に触れました。この質問に対する回答が他の場所であった場合は申し訳ありません。しかし、私が理解できる内容は見つかりませんでした。

if条件を作成しています。

if [ $inputstring = $INPUT ]

この行で「パラメータが多すぎます」というエラーが発生しました。私も次のことを試しました。

  if [ "$inputstring" = "$INPUT" ]

しかし、変数が(エコーを介して)同じ値を持っていると判断した場合、私のプログラムは「if」の内部には入りません。

誰でも助けることができますか?ありがとう

答え1

変数にスペースが含まれていると、「引数が多すぎる」引用符のない拡張が複数の単語に分割される可能性があります。したがって、実際に[ .. ]このようなことが発生しないようにするには、すべての変数を引用する必要があります。

ifあなたが書いた2番目の()は正確であり、両方の変数if [ "$inputstring" = "$INPUT" ]に同じデータが含まれている場合はデフォルトのブランチを実行します。ifただし、ソースによっては、空白が多いか、見にくい他の項目がある場合があります。たとえば、printf "<%q>\n" "$INPUT"変数の内容を明確な形式で表示する場合に使用します。 (出力形式は変数の値によって異なりますが、一般的に引用された値を印刷するか、バックスラッシュエスケープで特殊文字を表示します。)

たとえば、以下は同じデータを含まず、後にスペースがある変数です。

$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >

関連情報