- - PR -
シェルへ特殊文字を引数に与える
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-26 22:13
いつもお世話になっております。
Linux環境で、Javaから.shファイルを呼び出し、.shファイルからCのモジュールを呼び出しています。 .shファイルへの引数をそのまま、.shファイル内部で読んでいるCのモジュールに与えようとしていますが、特殊文字である、半角スペース(a\ aまたは'a a')をCのモジュールに与えることができません。 以下、検証内容です。 .shファイルの引数に特殊文字である半角スペース(a\ aまたは'a a')を与えると、.shファイル内ではa aの引数が一つの引数として認識しておりますが、.shファイルの引数からCのモジュールに引数としてa aの引数を渡すと、2つの引数として認識しているようです。 従って、.shファイルの引数にa\\\ aを渡して、.shファイル内から呼び出すCのモジュールへの引数にa\ aとして渡そうとしているのですが、うまく認識されていないようです。 誠に申し訳ございませんが、解決方法をご教授いただけると幸いです。 | ||||
|
投稿日時: 2007-08-27 14:10
こんにちは。
おそらくそれは、.shファイルの問題であり、.shファイルを修正しない限り対応できないでしょう。 簡単な例としては、
というシェルスクリプトの場合。 このスクリプトは、cat と同じように、引数で名前を指定した単数/複数のファイルの内容を連結して出力することが期待されます。 しかし、“a b” というような、空白を含んだ名前のファイルを読み込ませることはできません。クォートしようがエスケープしようが無駄です。( a と b という2引数に解釈されるのがありがち ) この場合の根本的な解決策は、スクリプト内で $@ ではなく "$@" を用いることです。 | ||||
|
投稿日時: 2007-08-27 23:08
返信ありがとうございます。
ご指摘のとおりで、.shファイル内で$@を"$@"に修正することで、本件解決いたしました。 ありがとうございました。 |
1