[解決済み] Bashで文字列をデリミターで分割するには?
2022-03-17 22:03:18
質問
この文字列を変数に格納しています。
IN="[email protected];[email protected]"
で文字列を分割したいと思います。
;
というようにデリミタがあります。
ADDR1="[email protected]"
ADDR2="[email protected]"
は必ずしも必要ではありません。
ADDR1
と
ADDR2
という変数があります。それらが配列の要素であれば、なおさらです。
以下の回答からの提案の後、結局私が求めていたのは以下のようなものでした。
#!/usr/bin/env bash
IN="[email protected];[email protected]"
mails=$(echo $IN | tr ";" "\n")
for addr in $mails
do
echo "> [$addr]"
done
出力します。
> [[email protected]]
> [[email protected]]
を設定することで、解決することができました。
インターナルフィールドセパレータ
(IFS) を
;
. その回答で何が起こったのかよくわからないのですが、どのようにリセットするのでしょうか?
IFS
をデフォルトに戻しますか?
RE:
IFS
の解決策として、私はこれを試してみたところ、うまくいきました。
IFS
を作成し、それを復元する。
IN="[email protected];[email protected]"
OIFS=$IFS
IFS=';'
mails2=$IN
for x in $mails2
do
echo "> [$x]"
done
IFS=$OIFS
ちなみに、私が試したときは
mails2=($IN)
を括弧で囲まないでループで印刷すると、最初の文字列だけが表示されました。
$IN
が動作します。
解決方法は?
を設定することができます。
内部フィールドセパレータ
(IFS)変数に格納し、配列にパースさせます。このようなことがコマンドの中で起こると、その代入先が
IFS
は、その単一のコマンドの環境に対してのみ行われます (そのコマンドの
read
). そして、入力を
IFS
を配列に変換し、それを反復処理することができます。
この例では、1行の項目を
;
それを配列に格納します。
IFS=';' read -ra ADDR <<< "$IN"
for i in "${ADDR[@]}"; do
# process "$i"
done
のコンテンツ全体を処理する例です。
$IN
で区切られた1行の入力に対して、その都度
;
:
while IFS=';' read -ra ADDR; do
for i in "${ADDR[@]}"; do
# process "$i"
done
done <<< "$IN"
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】シェルスクリプトで整数式が期待されるエラーが発生する
-
[解決済み】SEDをワイルドカードで使用する場合
-
[解決済み] etc/profileでVISIBLE=NOWを設定するのはなぜですか?
-
[解決済み] Bashでの動的な変数名
-
[解決済み] Bashスクリプトで引数を反復処理する方法
-
[解決済み] mkdir コマンドが bash スクリプトで見つかりません。
-
[解決済み] Bashで最新のディレクトリを変数に取得する
-
[解決済み] cygwin の ssh が終了時に "Killed by signal 1" と表示される
-
[解決済み] 絶対パスと論理パスの違い
-
[解決済み】bashシェルで1つの文字列を複数の変数に分割する方法は?[重複している]