単語のリストを for ~ in でループ
code
# ブランク文字で区切られた単語をループ
for item in apple orange banana; do
echo "${item}"
done
stdout
code
# 単語にブランク文字が含まれる場合はクォートで囲む
for name in 'sampe 1' 'sample 2' "sample 3" "sample 4"; do
echo "${name}"
done
stdout
配列を for ~ in でループ
code
declare -a arr=(apple orange banana)
for name in "${arr[@]}"; do
echo "${name}"
done
stdout
code
declare -a arr=(apple orange banana)
# ${arr[*]} の場合は配列全体が1つの単語として展開されるので注意
for name in "${arr[*]}"; do
echo "${name}"
done
stdout
連想配列を for ~ in でループ
code
declare -A hash=(
[apple]=100
[orange]=80
)
# 連想配列の値をループ
for val in "${hash[@]}"; do
echo "${val}"
done
stdout
code
declare -A hash=(
[apple]=100
[orange]=80
)
# 連想配列のキーをループ
for key in "${!hash[@]}"; do
echo "${key}" = "${hash[${key}]}"
done
stdout
ファイルやフォルダの一覧を for ~ in でループ
code
mkdir files
touch files/1.txt files/2.txt
mkdir files/dir
ls files/
echo '------------------------------'
for name in files/*; do
echo "${name}"
done
stdout
code
mkdir 'files 0'
touch 'files 0/1 1.txt' 'files 0/1 2.txt'
ls 'files 0/'
echo '------------------------------'
# ファイル名にブランク文字が含まれていても問題ない
for name in 'files 0'/*; do
echo "${name}"
done
stdout
コマンド置換の出力を for ~ in でループ
code
for c in $(printf 'Hello World!' | od -A n -tx1); do
echo -e "${c} : \x${c}"
done
stdout
算術式を使用した for ループ
code
# i が 0 ~ 2 まで 計 3 回ループ
for ((i=0; i<3; i++)); do
echo "i=${i}"
done
stdout
code
# 1 ~ 10 までの奇数をループ
for ((i=1; i<=10; i+=2)); do
echo "i=${i}"
done
stdout
code
# 複数の変数を使用したループ
for ((i=0, j=5; i<j; i++, j--)); do
echo "i=${i}, j=${j}, i+j=$((i+j))"
done
stdout
ブレース展開を使用したループ
code
for i in {1,2,3}; do
echo "i=${i}"
done
stdout
code
for i in {1..5}; do
echo "i=${i}"
done
stdout
code
for i in {1..2}-{A..C}; do
echo "i=${i}"
done
stdout