Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
変数の定義と参照
シェル変数は『変数名=値』の形式で定義し、参照するときは『$変数名』または『${変数名}』と書きます。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[@]} | 配列の全要素を参照します。 |
サンプルコード
変数の定義と参照です。『=』の前後にスペースを入れないのがルールです。
name="Alice" age=30 echo "名前: $name, 年齢: $age"
名前: Alice, 年齢: 30
波括弧『${}』で変数名の境界を明確にします。『$fruitsa』と『${fruit}s』は参照する変数が異なります。
fruit="apple"
echo "${fruit}s are delicious"
apples are delicious
『readonly』で読み取り専用変数を定義します。再代入するとエラーになります。
readonly PI=3.14159 echo "円周率: $PI" PI=3
円周率: 3.14159 bash: PI: readonly variable
『unset』で変数を削除します。削除後は空文字列になります。
tmp="一時データ" echo "削除前: $tmp" unset tmp echo "削除後: $tmp"
削除前: 一時データ 削除後:
配列の定義と参照です。インデックスは 0 始まりです。
colors=("red" "green" "blue")
echo "1番目: ${colors[0]}"
echo "全要素: ${colors[@]}"
echo "要素数: ${#colors[@]}"
1番目: red 全要素: red green blue 要素数: 3
『+=』で配列に要素を追加します。
colors+=("yellow")
echo "追加後: ${colors[@]}"
追加後: red green blue yellow
概要
シェル変数の定義では『=』の前後にスペースを入れないことが重要です。スペースがあると Bash はコマンドとして解釈してしまいます(例: name = Alice は「name というコマンドに = と Alice を渡す」という意味になりエラーになります)。
変数名の境界が曖昧な場合は波括弧を使います。たとえば $fruits と ${fruit}s は参照する変数が異なります。
環境変数として外部プロセスに引き継ぐには export を使います。変数の高度な展開(デフォルト値・文字列操作)は パラメータ展開 を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。