[過去ログ] くだらねえ質問はここに書き込め! Part 234 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
377
(3): 2018/12/16(日)02:11 ID:sSzOptpz(1/3) AAS
bashについてお伺いします
ファイルの各行を1つの要素とする配列を簡単に作る方法を模索しています
データには空白文字が含まれている可能性があり、そこで要素に分割されないように
空白文字を保護する必要があります
ループ回して1行読み込んでは配列に追加するという方法なら確実かと思いますが
簡潔にできないかと考えたあげく出たのが次のコードです

eval array=( $( cat file | sed "s/.*/'&'/" ) )

各行の先頭と末尾にシングルクォートを追加した上で、evalに再解釈させるという方法です
(話の単純化のためデータには元々シングルクオートが含まれていないとします)

この方法は一見うまくいったようでした
省6
379
(1): 2018/12/16(日)03:14 ID:648j88pB(1) AAS
>>377
> うまくいかない理由の認識はあっていますか?

あってると思う
evalの引数を引用符で括れば良さげ

eval "array=( $( cat file | sed "s/.*/'&'/" ) )"

> 他にこの目的を簡単に達成できるような方法はありますか?

mapfile -t array <file
380: 377 2018/12/16(日)03:47 ID:sSzOptpz(2/3) AAS
>>379
ありがとうございます
勉強になりました
382: 377 2018/12/16(日)05:08 ID:sSzOptpz(3/3) AAS
mapfileというのはbash4.0からの機能みたいですね

mapfileがない場合は最終的に次のコードに落ち着きました

eval "array=( $( cat file | sed "s/'/'\\\''/g; s/.*/'&'/" ) )"
(シングルクォート保護版)

しかし無駄な努力に終わってしまった…
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.040s