- PR -

シェルへ特殊文字を引数に与える

1
投稿者投稿内容
たかし
常連さん
会議室デビュー日: 2004/10/15
投稿数: 27
投稿日時: 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として渡そうとしているのですが、うまく認識されていないようです。

誠に申し訳ございませんが、解決方法をご教授いただけると幸いです。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-08-27 14:10
こんにちは。
おそらくそれは、.shファイルの問題であり、.shファイルを修正しない限り対応できないでしょう。
簡単な例としては、
コード:
#!/bin/sh
cat $@


というシェルスクリプトの場合。
このスクリプトは、cat と同じように、引数で名前を指定した単数/複数のファイルの内容を連結して出力することが期待されます。
しかし、“a b” というような、空白を含んだ名前のファイルを読み込ませることはできません。クォートしようがエスケープしようが無駄です。( a と b という2引数に解釈されるのがありがち )
この場合の根本的な解決策は、スクリプト内で $@ ではなく "$@" を用いることです。
たかし
常連さん
会議室デビュー日: 2004/10/15
投稿数: 27
投稿日時: 2007-08-27 23:08
返信ありがとうございます。

ご指摘のとおりで、.shファイル内で$@を"$@"に修正することで、本件解決いたしました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)