1

「問題」が何度も発生し、私はそれを回避することができなかったので、これは一般的な質問であり、実際には不可能なのだろうか.

問題は、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 シェルスクリプトに渡すことはできますか?

4

1 に答える 1