質問: 配列をbashシェルスクリプトに渡す方法は? 配列を変数として最初のbashシェルスクリプトから2番目のスクリプトに渡すにはどうすればよいですか。#!/bin/bash ar=('foo' 'bar' 'baz' 'bat') sh second.sh "$ar" # foo sh second.sh "${ar[@]}" # foo #!/bin/bash arr=$1 echo ${arr[@]} どちらの場合も、結果はfooです。しかし、私が望む結果はfoo bar baz bat。何が間違っているので、どうすれば修正できますか?
回答: ar配列は、最初の引数を介してsecond.shに渡されます。first.sh#!/bin/bash ar=('foo' 'bar' 'a space' 'bat') printf "ar array contains %d elements: " ${#ar[@]} printf "%s " "${ar[@]}" printf "\n" ./second.sh "$ar" ./second.sh "$(printf "(" ; printf "'%s' " "${ar[@]}" ; printf ")")" shはsecond.shスクリプトの実行には使用されなくなったことに注意してください。これらの連鎖されたprintfは、一部の配列要素にスペース文字が含まれている場合に安全な単一のパラメーターを偽造するために使用されます。second.sh#!/bin/bash declare -a arr=$1 printf "arr array contains %d elements: " ${#arr[@]} printf "%s " "${arr[@]}" printf "\n" --------ar配列が任意の数の引数を使用してsecond.shスクリプトに渡されるソリューションの場合。first.sh#!/bin/bash ar=('foo' 'bar' 'a space' 'bat') printf "ar array contains %d elements: " ${#ar[@]} printf "%s " "${ar[@]}" printf "\n" ./second.sh "$ar" ./second.sh "${ar[@]}" second.sh#!/bin/bash arr=( "$@" ) printf "arr array contains %d elements: " ${#arr[@]} printf "%s " "${arr[@]}" printf "\n" --------テスト:$ chmod +x *sh $ ./first.sh ar array contains 4 elements: foo bar a space bat arr array contains 1 elements: foo arr array contains 4 elements: foo bar a space bat