![配列を関数の最初のパラメータとして使用できますか? [コピー]](https://linux33.com/image/11236/%E9%85%8D%E5%88%97%E3%82%92%E9%96%A2%E6%95%B0%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E7%94%A8%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
パラメータの1つがスペースで区切られた単語を含む文字列である関数があります。
たとえば、"foo bar ccc"
この種の文字列は「配列」として扱われ、各単語を繰り返すことができると思います。
私の質問は、関数にパラメータとして渡す必要がある場合に最初のパラメータになることができるのか、それとも問題が発生するのかです。
最初のパラメータとして渡そうとしましたが、うまくいきましたが、知っておくべき問題があるかどうかはわかりません。
答え1
これは実際の配列ではなく文字列です。しかし、そうです。スペースを含む文字列を最初のパラメータまたは他のパラメータとして関数に渡すことができます。
set -f
f() {
IFS=' '
for x in $2; do echo "> $x"; done
}
liststr="foo bar ccc"
f something "$liststr" somethingelse
文字列を分割するために引用されていない拡張機能を使用する場合は、結果の単語もワイルドカードで表示され、必要なものでもそうでない場合もあることに注意してください。set -f
上記のように、無効な(グローバル)ワイルドカードを使用できます。
しかし、私はBashとしてマークしたので、おそらく適切な配列を使用して、nameref変数で使用する配列名を渡すか、関数を呼び出すときに配列を別の引数に分割する必要があります。
望むより: