プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。
シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。
詳しくは以下のスクリプト参照願います。
(1)引数作成のスクリプト
_/_/_/_/_/_/_/_/_/_/_/_/
#!/bin/sh
a="HELLO"
b="\"WOW WOW\""
test.sh $a $b
_/_/_/_/_/_/_/_/_/_/_/_/
(2)test.sh
_/_/_/_/_/_/_/_/_/_/_/_/
#!/bin/sh
echo $1
echo $2
echo $3
_/_/_/_/_/_/_/_/_/_/_/_/

これを実行すると
$1=HELLO
$2="WOW
$3=WOW"
となってしまいます。
これを
$1=HELLO
$2=WOW WOW
$3=NULL(空欄)
となるようにシェルスクリプトで作成することはできないのでしょうか?
ご教授よろしくお願いします。
よろしくお願いします。

A 回答 (2件)

sh ./test.sh HELLO wow "WOW WOW" bau


と入力すれば目的の動作を果たします. ということで,
b="wow \"WOW WOW\" bau"
からどのように上のコマンドを作るかという勝負になって結論:
eval "sh ./test.sh HELLO $b"
"sh~" で上のコマンドを「文字列として」作り, それを eval で実行します.
    • good
    • 0
この回答へのお礼

Tacosanさん
返信ありがとうございます!
目的の動作を確認できました!
ありがとうございました。

お礼日時:2008/03/07 09:35

a="HELLO"


b="\"WOW WOW\""

こっちでクォートするんじゃなくて、

test.sh $a $b



test.sh "$a" "$b"

にすればOK。

この回答への補足

sakusaker7さん
さっそく返答ありがとうございます。
期待通りの結果が出力されました。
シェルを呼び出すときにダブルクォーテーションつけるんですね^^

ついでに質問なのですが、
b="wow \"WOW WOW\" bau"
としたときに
$1=HELLO
$2=wow
$3=WOW WOW
$4=bau
という結果を得たいのですが、この場合はどのようにすればよいかおわかりになりますでしょうか?
お分かりになればおしえていただけたらありがたいです。
よろしくお願いします。

補足日時:2008/03/05 06:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!