配列要素を 1 行ごとに出力する
このステップでは、実験の主要なトピックである配列要素を 1 行ごとに出力する方法に焦点を当てます。Bash でこれを実現するさまざまな方法を探っていきましょう。
方法 1: for ループを使用する
配列要素を 1 行ごとに出力する最も簡単な方法は、for ループを使用することです。
print_array_loop.sh という名前の新しいファイルを作成します。
#!/bin/bash
## サンプル配列を作成する
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using a for loop:"
for planet in "${planets[@]}"; do
echo "$planet"
done
- ファイルを保存し、実行可能にします。
chmod +x /home/labex/project/print_array_loop.sh
- スクリプトを実行します。
./print_array_loop.sh
出力結果には、各惑星が別々の行に表示されます。
Printing planets using a for loop:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
方法 2: printf コマンドを使用する
printf コマンドは、echo を使ったループよりも効率的なことが多いです。
print_array_printf.sh という名前の新しいファイルを作成します。
#!/bin/bash
## サンプル配列を作成する
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using printf:"
printf "%s\n" "${planets[@]}"
- ファイルを保存し、実行可能にします。
chmod +x /home/labex/project/print_array_printf.sh
- スクリプトを実行します。
./print_array_printf.sh
出力結果は、前の方法と同じになります。
Printing planets using printf:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
方法 3: IFS 変数を使用する
内部フィールドセパレータ (Internal Field Separator, IFS) 変数を使用すると、配列要素の出力方法を制御できます。
print_array_ifs.sh という名前の新しいファイルを作成します。
#!/bin/bash
## サンプル配列を作成する
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Printing planets using IFS:"
## 一時的に IFS を改行に変更する
old_IFS="$IFS"
IFS=$'\n'
echo "${planets[*]}" ## 注意: IFS を使う場合は @ ではなく * を使用
IFS="$old_IFS" ## 元の IFS を復元する
- ファイルを保存し、実行可能にします。
chmod +x /home/labex/project/print_array_ifs.sh
- スクリプトを実行します。
./print_array_ifs.sh
出力結果には、再び各惑星が別々の行に表示されます。
Printing planets using IFS:
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
方法 4: 複数の手法を組み合わせる
これらの手法をより包括的な例で組み合わせてみましょう。
print_array_combined.sh という名前の新しいファイルを作成します。
#!/bin/bash
## サンプル配列を作成する
planets=("Mercury" "Venus" "Earth" "Mars" "Jupiter" "Saturn" "Uranus" "Neptune")
echo "Using a for loop with index:"
for i in "${!planets[@]}"; do
echo "Planet $i: ${planets[$i]}"
done
echo -e "\nUsing printf with formatting:"
printf "Planet: %s - %d letters\n" "${planets[@]}" "${#planets[@]}"
echo -e "\nSorted planets:"
printf "%s\n" "${planets[@]}" | sort
- ファイルを保存し、実行可能にします。
chmod +x /home/labex/project/print_array_combined.sh
- スクリプトを実行します。
./print_array_combined.sh
出力結果には、配列要素をフォーマットして出力するさまざまな方法が示されます。
Using a for loop with index:
Planet 0: Mercury
Planet 1: Venus
Planet 2: Earth
Planet 3: Mars
Planet 4: Jupiter
Planet 5: Saturn
Planet 6: Uranus
Planet 7: Neptune
Using printf with formatting:
Planet: Mercury - 8 letters
Planet: Venus - 5 letters
Planet: Earth - 5 letters
Planet: Mars - 4 letters
Planet: Jupiter - 7 letters
Planet: Saturn - 6 letters
Planet: Uranus - 7 letters
Planet: Neptune - 7 letters
Sorted planets:
Earth
Jupiter
Mars
Mercury
Neptune
Saturn
Uranus
Venus
これらの各方法にはそれぞれ利点があります。
- for ループは初心者にとって最も読みやすいです。
- printf 方法は大きな配列に対してより効率的です。
- IFS 方法はコンパクトですが、直感的でない場合があります。
- 組み合わせた手法は、豊富なフォーマットオプションを提供できます。
特定のユースケースとコーディングスタイルに最適な方法を選択してください。