「三語」というファイルがあります。これには次の情報が含まれます。
\#gray speedy bee
gr-A | sp-E-d-E | b-E
\#gray greedy pea
gr-A | gr-E-d-E | p-E
コマンドを実行するとき:
cat threewords | grep ^# | cut -c2-
このコマンドは # で始まる 2 行を取得します。次に#を削除し、それを出力に返します。
gray speedy bee
gray greedy pea
コマンドを実行するとき:
array=($(cat threewords | grep ^# | cut -c2-))
配列を作成しますが、次のようにすべての単語を別々の配列位置に分割します。
array[0] = gray,
array[1] = speedy,
array[2] = bee,
array[3] = gray,
array[4] = greedy,
array[5] = pea
各行の出力を次の配列に入れるようにコードを調べることができます。
array[0] = gray speedy bee,
array[1] = gray greedy pea
ベストアンサー1
分割は、IFS
区切り文字(デフォルトではスペース、改行、タブを含む)を使用して行われます。改行のみに設定IFS
:
$ IFS=$'\n' a=($(printf "1 2\n2 3\n"))
$ echo ${a[0]}
1 2
$ echo ${a[1]}
2 3
これはIFS
シェルによって変わるので、最初に保存して復元するのが最善です。
OLD_IFS="$IFS"
IFS=$'\n' array=($(grep '^#' threewords | cut -c2-))
IFS="$OLD_IFS"
これを行う理由はまったくありません。
cat threewords | grep '^#'
grep
ファイルを完全に読み取ることができる:
grep '^#' threewords
〜のようにスティーブンコマンド出力の追加のシェル拡張を実行するときは、次のようにワイルドカードを無効にする必要がありますset -f
。
$ help set
...
-f Disable file name generation (globbing).
それ以外の場合:
$ cd /; a=( $(printf "*\n") )
$ echo ${a[@]}
bin boot cdrom dev etc home ...