bashのドル記号の用法をいくつか

bashではドル記号($)で色々な場面で使う(Bourne shellでも使うけど)。自分が知ってる範囲でまとめてみた。

変数の参照

基本中の基本なんで敢えて書く必要はないかも。

foo=1234       # 変数の定義
echo $foo      # 変数の参照
ary=(1 2 3)    # 配列の定義
echo ${ary[1]} # 配列の要素の参照
for e in ${ary[@]} .... # 配列全体の参照

コマンド置換

これが「コマンド置換(command substitution)」と呼ぶって事を、このブログエントリーを書いてる時に初めて知った。要は、コマンドを先に実行して、その結果を文字列として評価するってやつ。

mkdir $(date +'%Y%m%d')
mkdir `date +'%Y%m%d'`   # 昔はバッククォートを使っていた
files=($(ls)) # コマンドの結果を配列に

exprの代わり

数値計算をする時、昔はexprコマンドを使ってた気がするけど、こんなやり方があるのね。

a=$((2 * 3))     # 簡単!
a=`expr 2 \* 3`  # * が展開されるのを防ぐために \ が必要

エスケープシーケンスを評価

\nを改行として扱ったり、そういうやつ。

echo line 1$'\n'line 2  # $'\n' が改行を表す
IFS=$'\n'

文字列の削除

ファイル名の一部を削除とかに使ったり。

a=abc123.def.456
echo ${a#*.}      # .以前を削除 (最短一致)
echo ${a##*.}     # .以前を削除 (最長一致)
echo ${a%*.}      # .以降を削除 (最短一致)
echo ${a%%*.}     # .以降を削除 (最長一致)

文字列の置換

簡単な置換ならbashで。正規表現が必要なものはsedやperlをどうぞ。

a=abc123.def.456
echo ${a/a*f/xyz} # a ~ f までの xyz に置換
echo ${a/./-}     # 最初の . を - に置換
echo ${a//./-}    # すべての . を - に置換

デフォルト値

変数が定義されていない、あるいは空の値が定義されている変数の場合、デフォルト値が使われる。

unset a
echo ${a:-ABC} # ABC が表示される。

その他

詳しくは man bash をどうぞー。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です