pyfg()
以下のコードでは、 の出力を正確にエコーされたとおりに渡したいと思います(つまり-htns
、との間のスペースはcrl
、空白としてではなく文字どおりに解釈されますaoeu()
) aoeu()
。もちろん、問題は in aoeu()
、$1
is -htns
、$2
is crl
、および$3
であり、この場合はまったく必要ありませんqjkx
。この例がまったく役に立たないことはわかっていますが、これを適用しようとしている実際のアプリケーションは、 below の代わりに外部プログラムを呼び出すため、以下のようなものaoeu()
が必要です。
#!/bin/bash
# pass_space_function.sh
aoeu() {
echo "$1" "$2"
}
pyfg() {
echo "-htns crl" "qjkx"
}
aoeu $(pyfg)
上記の出力を実行すると、次のようになります。
$ ./pass_space_function.sh
-htns crl
私の望ましい出力は次のとおりです。
$ ./pass_space_function.sh
-htns crl qjkx
明確にするために、コードが機能しない理由を正確に理解していますが、自分がやりたいことを実行させる方法についてはよくわかりません。
編集:
#!/bin/bash
aoeu() {
echo 1:"$1" 2:"$2" 3:"$3"
}
pyfg() {
# These variables might be user-provided.
wvz="/usr/lib/scarychacacters_\"@#$:%^&:*(){}[]; a o ;u ;::e i y f.so.4"
bm="/space space space"
snt="/var/cache/normalpath"
printf "%q %q %q" "$wvz" "$bm" "$snt"
}
aoeu $(pyfg)
そのコードは、私にとっては1:/usr/lib/scarychacacters_\"@#\$:%\^\&:\*\(\)\{\}\[\]\;\ 2:a\ 3:o\
. の空白で明らかに分割されています$wvz
。