[解決済み] Bashで文字列を配列に分割する方法は?
2022-03-20 18:14:33
質問
Bashスクリプトで、1行を分割して配列に格納したいのですが、どうすればいいですか?
例えば、こんな行があったとします。
Paris, France, Europe
出来上がった配列は、次のようにしたい。
array[0] = Paris
array[1] = France
array[2] = Europe
シンプルな実装が望ましく、スピードは問わない。どうすればいいのでしょうか?
どのように解決するのですか?
IFS=', ' read -r -a array <<< "$string"
の文字に注意してください。
$IFS
は個別にセパレータとして扱われるので、この場合、フィールドの区切りは
どちらか
という2つの文字の並びではなく、カンマやスペースが使われます。しかし、興味深いことに、スペースは特別に扱われるため、入力にカンマとスペースが現れると空のフィールドは作られない。
個々の要素にアクセスする場合。
echo "${array[0]}"
要素に対して反復処理を行うため。
for element in "${array[@]}"
do
echo "$element"
done
インデックスと値の両方を取得する場合。
for index in "${!array[@]}"
do
echo "$index ${array[index]}"
done
最後の例は、Bash配列がまばらであるために有効です。つまり、要素を削除したり、要素を追加したりすると、インデックスが連続しなくなるのです。
unset "array[1]"
array[42]=Earth
配列の要素数を取得する。
echo "${#array[@]}"
前述のように、配列は疎になることがあるので、最後の要素を取得するために長さを使うべきではありません。Bash 4.2以降では、以下のようになります。
echo "${array[-1]}"
2.05b 以降のすべてのバージョンの Bash で使用可能です。
echo "${array[@]: -1:1}"
負のオフセット値を大きくすると、配列の末尾からより遠い位置が選択されます。古い形式では、マイナス記号の前にスペースがあることに注意してください。これは必須です。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bash配列から要素を削除する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ArrayIndexOutOfBoundsExceptionが発生しました。7Exception: at Test.m)
-
[解決済み] Bashで文字列の配列をループする?
-
[解決済み] Swift カスタムオブジェクトの配列をプロパティ値でソートする方法
-
[解決済み] TypeScriptのオブジェクトをC#のようにDictionary型にする
-
[解決済み] jqで内部の配列の値に基づいてオブジェクトの配列をフィルタリングする方法は?
-
[解決済み] 配列からランダムに要素を選ぶ
-
[解決済み] 反復しながら値を変更する
-
[解決済み] Swift。配列を参照で渡す?
-
[解決済み] 行列を1次元の配列に変換する。
-
[解決済み] HttpPostedFileBaseをbyte[]に変換する。