人生最悪の忘れ物

はじめましてよろしくお願いします。
質問サイトもシェルも初心者なので至らない点がございましたら
ご容赦の程よろしくお願いします。

下記シェルスクリプトを実行すると下記エラーが発生します。
「test2」変数に空白無しで「abc」と入力するとエラーは発生しません。
変数test2の値(a bc)を変更せずにエラーが発生しない方法はないでしょうか?
手段でもかまいませんので教えてください。

========================= testsh110207.sh ======================================
#!/bin/sh

test1="abc"
test2="a bc"

if [ ${test1} = ${test2} ]
then
echo "=:文字列1と文字列2が等しい場合に真"
echo "test1の「${test1}」と、test2の「${test2}」は等しい"
fi

if [ ${test1} != ${test2} ]
then
echo "!=:数値1と数値2が等しくない場合に真"
echo "test1の「${test1}」と、test2の「${test2}」は等しくない"
fi


echo "********* テスト完了 *********"
=======================================================================

$ ./testsh110207.sh
./testsh110207.sh: line 6: [: too many arguments
./testsh110207.sh: line 13: [: too many arguments
********* テスト完了 *********

A 回答 (1件)

if [ ${test1} = ${test2} ]


  ↓
if [ "${test1}" = "${test2}" ]

値にスペースを含む変数を引数に渡すときはダブルクォーテーショ
ンで括らないと展開されて複数の引数が渡されたという風にみなさ
れてしまいます。

[ コマンドで比較する場合は第2引数に演算子、第4引数は] でな
ければなりませんが(もちろん演算子によってルールは違います)、
変数が展開されてしまった結果、] が第5引数になってしまってお
りエラーを吐いている状況です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報