⛳
bashの機能いろいろ
シェルスクリプトを書いていると「それはbash独自機能だから」「POSIXシェルには無い機能だから」と言われることがよくあります。だいたいは「それみんな使ってるのでPOSIXで標準化されてると思った」といったものなのですが、本記事では便利なものから「え、それやるくらいならPythonでよくない?」まで、bashの機能を紹介しようと思います。
for文でC言語っぽくループを回す
シェルスクリプトでfor文といえばfor i in $(seq 10)
とかをよく使いますが、bashだと以下のように書けます。
for ((i=1;i<=10;i++)) ; do
echo "${i}"
done
POSIXシェルには無いのですけど、とくに手打ちするような場合は便利なので私はよく使います。
正規表現
以下のように書くと正規表現を使えます。
VAR=foo
if [[ "${VAR}" =~ fo ]] ; then
echo matched
fi
稀に使うことがありますが、ほとんどの場合はgrepやsedでなんとかしちゃいます。bash組み込みの正規表現のほうがgrepやsedを呼び出すより高速でちょっとだけ見やすいですが、シェルスクリプトで速度を気にしなきゃいけない場面はほとんどないですし、可読性を気にするなら他の言語で書くほうがよいです。
配列
以下のように書くと配列を使えます。
array=("foo" "bar" "baz")
for e in "${array[@]}" ; do
echo "${e}"
done
以下のようにすれば添え字を使ったアクセスもできます。
for i in "${!array[@]}" ; do
echo "${array[i]}"
done
トイプログラム以外で使ったことはないです。これを使うくらいならPython使います。
map
以下のように書くとmapも使えます。
declare -A map=(["foo"]="hoge" ["bar"]="huga" ["baz"]="piyo")
for k in "${!map[@]}" ; do
echo "${map[$k]}"
done
こちらもトイプログラム以外では使ったことないです。
おわりに
bashでできることは他にもたくさんあるので興味があればman bash
を見てみてください。
Discussion