1

変数を含むURLを取得してファイルに書き込むbashスクリプトがあります。問題は、アンパサンドが干渉し、コマンド/制御文字として解釈されていることです。

この状況では、スクリプトに渡される前に文字列をエスケープすることはできず、これを行う方法をまだ見つけていません。

if [ $1 ] ; then
    url=$1
    printf %q "$url" > "/somepath/somefile"
fi

$ 1は、たとえばlocalhost?x = 1&y = 2&z=3です。

印刷されるのは、最初のアンパサンドの前の部分のみです: "localhost?x = 1"

printfの代わりにechoも試しましたが、まったく同じですか??

4

3 に答える 3

2

スクリプトは問題ありませんが、引用符で囲まれたパラメーターを使用してスクリプトを呼び出す必要があります。

./myscript.sh "localhost?x=1&y=2&z=3"
于 2012-09-25T08:16:52.763 に答える
1

エコーもプリントも問題ありません。問題は、スクリプトを実行すると、これら2つのジョブがバックグラウンドで開始されることです。詳細については、http://hacktux.com/bash/ampersandを確認してください。アポストロフィで「localhost?x = 1&y = 2&z = 3」を指定してスクリプトを開始するだけでよいため、bashはアンパサンドを演算子としてではなく、通常の文字として扱います。

于 2012-09-25T08:23:05.020 に答える
0

物事を引用します。$1すべてのsをsに置き換えます"$1"。そして、実際にスクリプトを呼び出すときに引数を引用します。

于 2012-09-25T08:14:53.613 に答える