Null で区切られた文字列の分割

Null で区切られた文字列の分割

以下は2つのステートメントですread。 1つはスペースを区切り文字として使用し、もう1つ\0は最初のステートメントのみを有効にします。二つ目は、私が何を間違っているのだろうか?

$ IFS=' '; read first second  < <(printf "%s " "x" "y" ); echo "$first+$second"

x+y

$ IFS=$'\0'; read first second  < <(printf "%s\0" "x" "y" ); echo "$first+$second"

座標+

ベストアンサー1

配列とmapfileAKA組み込みreadarray配列を試してください。help mapfile詳細より。mapfileのオプションに空の文字列を引数として指定すると、-dNULが区切り文字として使用されます。

まず、任意の区切り文字を使用して配列を単一の文字列に連結できる関数を作成します。

$ joinarray() { local IFS="$1"; shift; echo "$*"; }

これは最初の引数を出力区切り文字として使用し、次にechoを使用して残りの引数を単一の文字列として印刷します。これは配列接続に限定されず、すべての引数(配列、スカラー変数、固定文字列)で機能しますが、特に配列で使用する場合に便利です。joinarray標準コマンドと競合しないように呼び出されますjoin

次に、「$array」という配列を使用します。

$ mapfile -d '' array < <(printf "%s\0" "x" "y" )   # read the data into $array

$ declare -p array                  # show that the data was read correctly
declare -a array=([0]="x" [1]="y")

$ joinarray + "${array[@]}"         # output the array joined by + characters
x+y

おすすめ記事