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 をどうぞー。