HRR Co., Ltd.

技術的な記録を残していくことを目的としています。1次情報を大事にしています。

lsの実行結果をforでくるくる on Bash

はじめに

たまに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ネタは今後も投稿すると思います。
今回は以上でした。