はじめに
たまにBashのスクリプトを書くときがあるのですが、毎回のように忘れるんですよね…。
例えば、配列の扱いやfor文の書き方など。
そこで今回は「lsの実行結果をforでくるくる」についてのメモを残すことにしました。
ソースコード
lsの実行結果を配列にして、forでくるくる
array=($(ls /home/${USER}/work)) for eachValue in ${array[@]}; do echo ${eachValue} done
解説
コマンド実行について
`(バッククォート)で囲む方法もありますが、入れ子にできないのもあって私は$()を多用します。
その実行結果を()で囲むことにより、配列としています。
配列について
Bashの配列はこんなふうに()にスペース区切りになっています。
fruits=(apple orange banana)
lsコマンドを打つことで、自然とスペース区切りの文字列ができあがり、それを()で囲むことで配列としています。
for文と配列の展開
${array[@]}は配列の中身を展開するものです。
fruits=(apple orange banana) echo ${fruits[@]} # 出力: # apple orange banana
なので、こんなふうに書いてもOK。
for eachValue in apple orange banana; do echo ${eachValue} done # 出力: # apple # orange # banana
${array[*]}っていうのもあるよね?
${array[*]}についても同じ、というような書き方をたまに見ますが、違いは明確にあります。
"(ダブルクォート)で囲まれたときに違いが出ます。
IFS=',|*' fruits=(apple orange banana) echo "${fruits[@]}" echo "${fruits[*]}" # 出力: # apple orange banana # apple,orange,banana
IFSの最初の1文字目が区切り文字として使われるんですね。
詳細はman bashをご参照ください。
最後に
Bashネタは今後も投稿すると思います。
今回は以上でした。