- ベストアンサー
シェルスクリプト 引数の引渡しについて
こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (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(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sh ./test.sh HELLO wow "WOW WOW" bau と入力すれば目的の動作を果たします. ということで, b="wow \"WOW WOW\" bau" からどのように上のコマンドを作るかという勝負になって結論: eval "sh ./test.sh HELLO $b" "sh~" で上のコマンドを「文字列として」作り, それを eval で実行します.
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
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 という結果を得たいのですが、この場合はどのようにすればよいかおわかりになりますでしょうか? お分かりになればおしえていただけたらありがたいです。 よろしくお願いします。
お礼
Tacosanさん 返信ありがとうございます! 目的の動作を確認できました! ありがとうございました。