- - PR -
Shellについて意図しない「’」が着く
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-19 19:07
お世話になっております。
以下のようなスクリプトを作成して実行したところ コマンドを呼び出した際のパラメタに意図しない 「'」が付加されてコマンドに渡されてしまいます。 そのため、コマンドがパラメタエラーで終了して しまうのですが、この意図しない「'」を付加させ ないでパラメタをコマンドに渡す方法はありますで しょうか? コマンドの仕様:command名 -i parm1:"parm2" parm2を「"」で囲む仕様となっています。 #!/bin/bash pg="command" parm1="name" parm2="address tel" set -x $pg -i $parm1:\"$parm2\" set +x 上記を実行すると以下のようになります + command -i 'name:"address tel"' 本来したいことは + command -i name:"address tel" よろしくお願いします | ||||
|
投稿日時: 2004-11-19 21:09
こんにちは。
シングルクォートが入ると、コマンドが実行されないのでしょうか? もし実行できているとすれば、 本来したいことは、コマンドの実行ではなく、 実行されるコマンドの忠実な表示なのでしょうか? | ||||
|
投稿日時: 2004-11-19 21:33
実際にやってみるとわかりますが、angelusさんが実現されたいの
は、「command」というコマンドを、 「-i」「name:"address tel"」 という2つのパラメータを渡す形で呼び出したいにも関わらず、 「-i」「name:"address」「tel"」 というようにaddressとtelの間のスペースで区切られてしまうとい う状態ということなのではないでしょうか? | ||||
|
投稿日時: 2004-11-22 10:29
こんにちは。
藍空さんのおっしゃるように、スペースで区切られるのがまずいのであれば、 $pg -i $parm1:\""$parm2"\" としてみるとか。 angelusさんは、シングルクォートを気にしているようにしか思えませんが... ただし、シングルクォートの外し方は今のところ分かりません。 | ||||
|
投稿日時: 2004-11-22 14:38
こうですよね? + command -i 'name:"address' 'tel"' このシングルクォートは、シェルが内部で補完しているだけで、 呼び出したコマンドに渡ることはありません。 (echo 'abc' の結果が abc になるのと一緒) addressとtelが区切られて困るのであれば、 $pg -i "$parm1:\"$parm2\"" のようにパラメータ部分をダブルクォートで明示的に括ってください。 | ||||
|
投稿日時: 2004-11-22 23:09
bash を使うことは必須でしょうか?
ボーンシェル(sh) であれば ' で勝手に補完したりはしません。 #!/bin/sh pg="command" parm1="name" parm2="address tel" set -x $pg -i $parm1:\"$parm2\" set +x であれば、 + command -i name:"address tel" となります。 | ||||
|
投稿日時: 2004-11-23 01:13
シングルクォートが補完されるされないは関係ないです。 (どうせ呼び出したコマンドには渡らないので) 元記事の「コマンドがパラメタエラーで終了してしまう」というのは シングルクォートうんぬんではなく、そのコマンド自身の問題でしょう。 |
1