[過去ログ] くだらねえ質問はここに書き込め! Part 238 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
209(5): 2019/10/31(木)00:50 ID:reP6OUR1(1/2) AAS
bashの配列で質問です。
空白で区切られた3つの要素を配列に代入
declare -a array=( "A B C" "C D E" "F G H" );
for ((i = 0; i < ${#array[@]}; i++)) { echo "array[$i] = ${array[i]}" }
結果は予想通り
array[0] = A B C
array[1] = D E F
array[2] = G H I
今度は改行で区切られた3つの要素の内容を、awkで逆順した結果に「"」とつけて配列に代入。
declare -a array=( $(echo -e "A B C\nD E F\nG H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}') );
省14
210: 2019/10/31(木)00:56 ID:hpOp+iT/(1/6) AAS
>>209
配列なんか使うな。それはbashの拡張だ。
POSIXシェルには配列などというものはない。
外部コマンドの呼び出しなんだからそれはbashスクリプトの外の話だ
bash専用機能である配列は使えない
212: 2019/10/31(木)01:07 ID:hpOp+iT/(3/6) AAS
>>209
話の前に、echo -e はやめとけ。それはbash依存だ。
エスケープシーケンスを使うならprintfを使ったほうがいい
簡単になおせる
printf '%s\n' "A B C" "D E F" "G H I" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'
そしてbashの配列の代わりに位置パラメータを使えばいい
set -- "A B C" "D E F" "G H I"
printf '%s\n' "$@" | awk '{printf "\"%s %s %s\"\n", $3, $2, $1}'
214(1): 2019/10/31(木)01:11 ID:CucVKUrX(1) AAS
>>209
readarray
215(1): 2019/10/31(木)01:14 ID:niz424am(1) AAS
>>209
readarrayはパイプにするとサブシェルになってしまって動かないから例も置いとく
readarray -t array < <(echo -e "A B C\nD E F\nG H I" | awk '{printf "%s %s %s\n", $3, $2, $1}')
218(2): 2019/10/31(木)01:29 ID:8CGDUgWT(1) AAS
>>209
古いbashでreadarrayがなければ
eval 'array=('"$(echo -e "A B C
\nD E F\nG H I" | awk '{printf "\"%s %s %s\" ", $3, $2, $1}'
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s