LoginSignup
9
9

More than 5 years have passed since last update.

シェル変数の便利なセット方法と引数の扱い

Last updated at Posted at 2014-04-13

シェル変数の便利な設定方法を紹介します。

# args.sh
#!/bin/bash
echo ${1:-now}
A=${1:?} # if $1 is not set, script ends here.
echo $A
A=${B:=abc}
echo $A
echo $B
A=${C:=def}
echo $A
echo $B
echo $C

実行結果

$ ./args.sh a
a
a
abc
abc
def
abc
def
$ ./args.sh 
now
./args.sh: line 3: 1: parameter null or not set

説明

${B:=abc} は、$B に値がセットされていたらそれを使い、
セットされていなかったら = のあとに指定した値を $B に代入し使用する、という意味です。

${1:-now} も似たような意味です。$1 に値がセットされていたらそれを使い、
セットされていなかったら - のあとに指定した値を使用します。
ただし、指定した変数には代入されません。位置パラメタを扱うには好都合なわけです。

${1:?} は、コメントの記述の通り、指定した変数の nullチェック をしてくれます。
しかも、シェルスクリプトの中に記載すると、値がセットされていなければ終了ステータス 1 で処理を終了してくれます。
また、? の後に何か記載すれば、それがエラーメッセージとして利用されます。

#!/bin/bash
echo ${1:-now}
A=${1:?一つ目の引数を指定してください} # if $1 is not set, script ends here.
echo $A

実行結果

$ ./args.sh 
now
./args.sh: line 3: 1: 一つ目の引数を指定してください

単純に引数が指定されているかどうかだけなら、これで書けてしまう、というわけです。

補足

以上、簡単な記述方法の紹介をしました。
書く側からすると確かに便利なのですが、後で読む人に対しては親切ではありません。
ちゃんとコメントを残すか、自分用にちょっとしたものを書くときなどに限定した方がいいかもしれませんね。

なお ${A:+ghi} とすると、- を使用した場合の逆になります。Aに値がセットされていたら、ghi を使用します。変数Aの値は変わりません。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9