複数の文字列を返すシェルスクリプトでコマンドを使用しています。それぞれの文字列は""
で囲まれています。これらの文字列を配列の別々の要素として必要とするため、このように、区切り文字として"
を使用して文字列:空の文字列を作成する "
IFS='"'
arr=($(command that returns multiple strings enclosed in ""))
、各文字列の先頭に"
文字があるので、私のスクリプトは、空の文字列と文字列自体に、各文字列を分割たとえば、。文字列"foo" "bar"
は、(空文字列)、
foo
、(空文字列)、
bar
。分割しながら、
- は、どういうわけか、空白を取り除く:だから、私の配列ではなく、2
のがあり、これを克服するための二つのアプローチすることができ、いずれかの実装に任意のヘルプは参考になる、4つの要素を持って終わります。
- 空白で配列を作成し、別の配列を作成し、その要素を空白以外の2番目の配列に挿入するだけです。
解決策としてbashとkshの両方にタグ付けをしていますが、解決策としてはbashも許容されます。ありがとう!あなたがを分割している引用符で囲まれた文字列場合を行う
array=()
while IFS= read -r -d '' piece; do
array+=("$piece")
done < <(command-that-returns-multiple-quoted-strings | xargs printf '%s\0')
:引用符で囲まれた文字列が改行を含んでいない限り
'arr =($(...))'は最初から悪い習慣です。効果的に*決してそれは何かがすべき場所です。 –
出力を制御できれば、 'eval arr =($(echo '" foo "" bar "'))' 'を使うことができます。これは、例えば 'eval arr =($(echo '" foo "" $(echo dangerous) "))'のように潜在的に危険です。 ' – PesaThe
(区切り文字で単語を分割したい場合は、代わりに' IFS = '"' read -r -a arr <<<" $ string "'を使用してください - そうすることでglob拡張が回避されます。しかし、シェル引用された内容を解析する)。 –