1. ホーム
  2. linux

[解決済み] 環境変数のチェック

2023-03-01 09:06:30

質問

私は環境変数の値をチェックし、その値に応じて特定のことを行おうとしており、その変数が設定されている限りはうまくいきます。しかし、それが設定されていないとき、私は大量のエラーを得ます (BASH は私が指定した文字列を未定義の変数と比較しようとしているためだと思います)。

私はそれを防ぐために余分なチェックを実装しようとしましたが、うまくいきませんでした。私が使用しているコードのブロックは次のとおりです。

#!/bin/bash

if [ -n $TESTVAR ]
then
  if [ $TESTVAR == "x" ]
  then
    echo "foo"
    exit
  elif [ $TESTVAR == "y" ]
  then
    echo "bar"
    exit
  else
    echo "baz"
    exit
  fi
else
  echo -e "TESTVAR not set\n"
fi

そして、これが出力です。

$ export TESTVAR=x
$ ./testenv.sh 
foo
$ export TESTVAR=y
$ ./testenv.sh 
bar
$ export TESTVAR=q
$ ./testenv.sh 
baz
$ unset TESTVAR
$ ./testenv.sh 
./testenv.sh: line 5: [: ==: unary operator expected
./testenv.sh: line 9: [: ==: unary operator expected
baz

質問なのですが、「unset TESTVAR」は無効化しないのでしょうか?そうではないような気がするのですが・・・。

どのように解決するのですか?

変数をダブルクォートで囲む。

if [ "$TESTVAR" == "foo" ]

とすると、変数が空の場合、テストは次のように展開されます。

if [ "" == "foo" ]

に展開されるのに対し、引用しない場合は

if [  == "foo" ]

となっていますが、これは構文エラーです。