変数の定義と参照
シェル変数は『変数名=値』の形式で定義し、参照するときは『$変数名』または『${変数名}』と書きます。Bashでは型の宣言は不要で、すべての値は文字列として扱われます。
構文
変数を定義します(= の前後にスペースを入れません)。
変数名=値
変数を参照します。
echo $変数名
echo ${変数名}
変数を削除します。
unset 変数名
読み取り専用変数を定義します。
readonly 変数名=値
構文一覧
| 構文 | 概要 |
|---|---|
| name=value | 変数に値を代入します。= の前後にスペースは入れません。 |
| $name / ${name} | 変数の値を参照します。波括弧は文字列の境界を明確にするときに使います。 |
| unset name | 変数を削除します。以後は参照しても空文字列になります。 |
| readonly name=value | 読み取り専用変数を定義します。以後の代入はエラーになります。 |
| declare -i name | 整数型の変数を宣言します。代入時に算術評価が行われます。 |
| declare -r name | 読み取り専用変数を宣言します(readonly と同じ効果)。 |
| declare -a name | 配列変数を宣言します。 |
| name=(a b c) | 配列を定義します。インデックスは 0 始まりです。 |
| ${name[0]} | 配列の 0 番目の要素を参照します。 |
| ${name[@]} | 配列の全要素を参照します。 |
サンプルコード
変数の定義と参照です。『=』の前後にスペースを入れないのがルールです。
variable.sh
name="Alice" age=30 echo "名前: $name, 年齢: $age"
bash variable.sh 名前: Alice, 年齢: 30
波括弧『${}』で変数名の境界を明確にします。『$fruitsa』と『${fruit}s』は参照する変数が異なります。
brace.sh
fruit="apple"
echo "${fruit}s are delicious"
bash brace.sh apples are delicious
『readonly』で読み取り専用変数を定義します。再代入するとエラーになります。
readonly.sh
readonly PI=3.14159 echo "円周率: $PI" PI=3
bash readonly.sh 円周率: 3.14159 bash: PI: readonly variable
『unset』で変数を削除します。削除後は空文字列になります。
unset.sh
tmp="一時データ" echo "削除前: $tmp" unset tmp echo "削除後: $tmp"
bash unset.sh 削除前: 一時データ 削除後:
配列の定義と参照です。インデックスは 0 始まりです。
array.sh
colors=("red" "green" "blue")
echo "1番目: ${colors[0]}"
echo "全要素: ${colors[@]}"
echo "要素数: ${#colors[@]}"
bash array.sh 1番目: red 全要素: red green blue 要素数: 3
『+=』で配列に要素を追加します。
array_add.sh
colors=("red" "green" "blue")
colors+=("yellow")
echo "追加後: ${colors[@]}"
bash array_add.sh 追加後: red green blue yellow
概要
シェル変数の定義では『=』の前後にスペースを入れないことが重要です。スペースがあると Bash はコマンドとして解釈してしまいます(例: 『name = Alice』は「name というコマンドに = と Alice を渡す」という意味になりエラーになります)。
変数名の境界が曖昧な場合は波括弧を使います。たとえば『$fruits』と『${fruit}s』は参照する変数が異なります。
環境変数として外部プロセスに引き継ぐには export を使います。変数の高度な展開(デフォルト値・文字列操作)は パラメータ展開 を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。