2011-01-17 15 views
-1

EDIT(サイドの質問)bashスクリプトでURLをエンコードする方法は?

誰かがこの行のしていることを説明できますか?

eval website=\${$#} 

スクリプトは、それが多少この

./script.sh -t 30 -n 100 -aテストhttp://www.google.com

のように呼ばれています、paremetersの多くを読み、私は(トラブルURLを読み込むを持っていますhttp://www.google.com

私はbashスクリプトに渡されたURLを使用してFirefoxを起動しています。どのようにエンコードするのですか?これらのURLのいくつかは問題を引き起こしています。

$記号が

を削除される

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/141912

として

eval website=\${$#} // takes as argument 

firefox -width 1280 -height 8000 ${website} & 

問題のあるURLが

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1 $ Firefoxで

41912は、それが開いていくつかのコード

+1

-1 – ajreal

+0

イラスト/テストを容易にするために、問題のURLを記載してください:ここでは

は同じことを達成するいくつかの他のBashismsがありますbashのクォートと関係があります。 – qdii

答えて

2

おそらく最も簡単な方法は、いくつかの問題を引き起こす文字をエスケープすることです。

あなたのURLが'、または\として、いくつかの異常な文字が含まれていない限り、あなただけの牽引'の間、あなたのURLを入れて問題ないはずです。

$ firefox 'YOUR_URL' 

これが評価さYOUR_URLコンテンツを防ぐことができます。


編集、更新の答えを反映するには:

あなたはbashがあなたのパラメータを拡張する方法echoコマンドを使用して見ることができます。あなたの例では

は、bashは(これだけ$4を削除します)ので、それが定義されていない変数4の値、と$4を代入し、変数(4という名前の変数)を識別するために使用され$を考えている:

$ echo http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912 
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/11912 
$ echo 'http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912' 
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912 
2

evalを使用せず、常に変数を引用してください。

firefox "$1" & 
1

このライン:

eval website=\${$#} 
かかわらずありますどのように多くの、最後の位置パラメータに変数を設定します

パラメータ1に保存されているイスト最初の引数。ところで、Bashismある

website=${@: -1} 

:へ

変更に。この質問は、URLエンコードとAとはほとんど関係がない:

echo "${!#}" 
echo "${@:$#}" 
echo "${BASH_ARGV[0]}" 
+0

デニスありがとう! – HyderA

関連する問題