「問題」が何度も発生し、私はそれを回避することができなかったので、これは一般的な質問であり、実際には不可能なのだろうか.
問題は、BOURNE シェル スクリプト (Bash ではない) と、スペースを含む文字列を値に含む環境変数を使用できるかどうかです。
問題を説明する簡単なケースを考えてみましょう -
#! /bin/sh
parameters='-T "XXX YYY ZZZ"'
/usr/bin/xterm ${parameters}
exit 0
スクリプトが実行されると、内部引用符は文字列の区切り記号としてではなく、リテラル文字として解釈されます。
sh -x test
+ parameters=-T "XXX YYY ZZZ"
+ /usr/bin/xterm -T "XXX YYY"
/usr/bin/xterm: No absolute path found for shell: YYY"
xterm は、使用するシェルの次のパラメーターとして -T "XXX をタイトル パラメーターとして、YYY" を認識しています。
引用符、バックスラッシュのネストの順序を逆にして、引用符を削除して、スペースにバックスラッシュを使用することさえ試みました。
sh -x test
+ parameters=-T XXX\ YYY
+ /usr/bin/xterm -T XXX\ YYY\
/usr/bin/xterm: No absolute path found for shell: YYY\
しかし、何も機能しません。
タイトル文字列にスペースが含まれていない場合は問題ありません。
#! /bin/sh
parameters='-T "the_title"'
/usr/bin/xterm ${parameters}
可能であればこれを機能させたい理由の 1 つは、変数をシェル スクリプト関数のパラメーターとして使用することです。それ以外の場合は、複数のパラメーターを意味します。この場合、1 つはコマンド ライン フラグ (-T) 用で、もう 1 つはコマンド ライン パラメーター値 (タイトル文字列) 用です。
したがって、環境変数内の文字列にスペースを使用して、変数が展開されたときにスペースがコマンドラインパラメーターセパレーターとして扱われないようにすることで、パラメーターとして実行可能ファイルに渡すか、BOURNE シェルスクリプトに渡すことはできますか?