以下は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
配列とmapfile
AKA組み込みreadarray
配列を試してください。help mapfile
詳細より。mapfile
のオプションに空の文字列を引数として指定すると、-d
NULが区切り文字として使用されます。
まず、任意の区切り文字を使用して配列を単一の文字列に連結できる関数を作成します。
$ 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