IFSの区切り文字をアレイ拡張に使用できないのはなぜですか?

IFSの区切り文字をアレイ拡張に使用できないのはなぜですか?

区切り文字の変更をシェルではなく次のechoコマンドに制限したいと思います。

$ myarr=(1 2 3)

$ echo $( IFS="|"; echo "${myarr[@]}" )
1 2 3

配列拡張で区切り文字を使用できないのはなぜですか?ありがとうございます。

ベストアンサー1

POSIXの観点からは、~について$*:

フィールド分割を行わないコンテキストで拡張が発生した場合は、最初のフィールドを連結して単一のフィールドを形成する必要がありIFSますIFS。これは変数で、空の<space>文字列に設定されている場合は区切り文字はありません。IFSIFS

区切り文字を使用して単語を結合するには、以下を$*使用する${array[*]}必要がありますbash

$ set -- word1 word2 word3 "some other thing" word4
$ IFS='|'
$ echo "$*"
word1|word2|word3|some other thing|word4

または、次の配列を使用してくださいbash

$ arr=( word1 word2 word3 "some other thing" word4 )
$ IFS='|'
$ echo "${arr[*]}"
word1|word2|word3|some other thing|word4

あなたのコードで:

$ myarr=( 1 2 3 )
$ echo "$( IFS="|"; echo "${myarr[*]}" )"
1|2|3

おすすめ記事