- PR -

Shellについて意図しない「’」が着く

1
投稿者投稿内容
angelus
会議室デビュー日: 2004/05/27
投稿数: 10
投稿日時: 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/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2004-11-19 21:09
こんにちは。

引用:

上記を実行すると以下のようになります
+ command -i 'name:"address tel"'

本来したいことは
+ command -i name:"address tel"



シングルクォートが入ると、コマンドが実行されないのでしょうか?

もし実行できているとすれば、
本来したいことは、コマンドの実行ではなく、
実行されるコマンドの忠実な表示なのでしょうか?
藍空
常連さん
会議室デビュー日: 2003/06/24
投稿数: 49
投稿日時: 2004-11-19 21:33
実際にやってみるとわかりますが、angelusさんが実現されたいの
は、「command」というコマンドを、

 「-i」「name:"address tel"」

という2つのパラメータを渡す形で呼び出したいにも関わらず、


 「-i」「name:"address」「tel"」

というようにaddressとtelの間のスペースで区切られてしまうとい
う状態ということなのではないでしょうか?
めぐ
ベテラン
会議室デビュー日: 2004/11/09
投稿数: 86
お住まい・勤務地: 千葉県内
投稿日時: 2004-11-22 10:29
こんにちは。

引用:

 「-i」「name:"address」「tel"」

というようにaddressとtelの間のスペースで区切られてしまうとい
う状態ということなのではないでしょうか?



藍空さんのおっしゃるように、スペースで区切られるのがまずいのであれば、

$pg -i $parm1:\""$parm2"\"
としてみるとか。

angelusさんは、シングルクォートを気にしているようにしか思えませんが...
ただし、シングルクォートの外し方は今のところ分かりません。
altezza
会議室デビュー日: 2002/09/17
投稿数: 16
投稿日時: 2004-11-22 14:38
引用:

angelusさんの書き込み (2004-11-19 19:07) より:
上記を実行すると以下のようになります
+ command -i 'name:"address tel"'



こうですよね?
+ command -i 'name:"address' 'tel"'

このシングルクォートは、シェルが内部で補完しているだけで、
呼び出したコマンドに渡ることはありません。
(echo 'abc' の結果が abc になるのと一緒)
addressとtelが区切られて困るのであれば、
$pg -i "$parm1:\"$parm2\""
のようにパラメータ部分をダブルクォートで明示的に括ってください。
forbesii
会議室デビュー日: 2004/11/22
投稿数: 1
投稿日時: 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"

となります。
altezza
会議室デビュー日: 2002/09/17
投稿数: 16
投稿日時: 2004-11-23 01:13
引用:

forbesiiさんの書き込み (2004-11-22 23:09) より:
bash を使うことは必須でしょうか?
ボーンシェル(sh) であれば ' で勝手に補完したりはしません。



シングルクォートが補完されるされないは関係ないです。
(どうせ呼び出したコマンドには渡らないので)

元記事の「コマンドがパラメタエラーで終了してしまう」というのは
シングルクォートうんぬんではなく、そのコマンド自身の問題でしょう。
1

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