2012-04-08 4 views
2

私は、次のbashスクリプトを持っている:Linux Bash。 2行の違いは何ですか?

1 #!/bin/bash 
2 query='query= SELECT * WHERE { ?s ?p ?o } LIMIT 5' 
3 cmd="curl $1 -s -d \"$query\"" 
4 echo "$cmd" 
5 # curl $1 -s -d "$query" 
6 # $cmd 

5番目と6番目の行は同じことを行う必要があります。 5行目のコメントを外すと、すべて正常に動作します。しかし、6行目では何も動作しません。

私は違いが何であるか疑問に思っていますか?

ありがとうございました。

+1

エコー "$ cmd"とは何ですか? –

+1

'$ eval" $ cmdを試しましたか? –

+0

echo "$ cmd"と表示されます:curl http:// localhost:2001/sparql -s -d "query = SELECT * {}" –

答えて

1

ライン5は、単一引数として$queryを渡します。 6行目は$queryの各単語を別々の引数として渡します。先頭には"、最後には"が続きます。 Put your arguments in an array instead.

2

いいえ; 4行目ではコマンドを "echo"するだけで表示しています。 6行目が実際にコマンドを実行します。

など。

$eg="ls /var/www" 
echo $eg #This would literally return ls /var/www" 
$eg #This would return the directory listing of /var/www/ (actually run the command). 
+0

OPはすでにそれを理解しています。ライン5とライン6がどのように異なっているのかという質問ではなく、ライン4とライン6がどのように異なっているかを尋ねる。 4行目はデバッグのようです。 – ruakh

関連する問題