2012-01-06 9 views
1
#!/bin/bash 

yesterday= date --date="1 day ago" +%Y%m%d | tr -d '\n' 
remote_file="76.99.20.129\$yesterday.zip" 

echo $remote_file 

出力:のbashスクリプト昨日のzipファイル

2012010476.99.20.129$yesterday.zip 

はここで何が起こっていますか?

私はwgetの呼び出しに、この変数を渡すと、自動的にファイル

+0

私はREMOTE_FILEみました=「76.99.20.129 \/$ yesterday.zip」 – jeremyforan

+0

これはあなたのコードのコピー&ペーストですかこの再入力されますか?私はそれが再入力されたと思われる十分な間違いがあるように感じる。私は実際には存在しなかったコードをデバッグするのは好きではありません。ありがとう。 – sarnold

+0

取得したい正確な出力は何ですか?目標は何ですか? –

答えて

3

ここで2つの問題をダウンロードしたいです。最初は、あなたが実際に変数にdateコマンドの出力をキャプチャしていないということです。

pax> yesterday= date --date="1 day ago" +%Y%m%d | tr -d '\n' 
[email protected]:~$ echo $yesterday 
<<no output>> 

あなたのそのコマンドがやっている何dateコマンドを実行している期間中に空の文字列にyesterdayを設定して、 nifty bash機能私はワンショット環境設定を呼び出しますが、bashはほとんど確実に別のものを呼び出します。リターンの上、それを開始したシェルにはない、dosomethingコマンドは、その環境でのxyzzyのエントリを持っている

xyzzy=plugh dosomething 

しかし:それはへの異なるません。これは異なることに注意してください:あなたが触れることはないだろう変数を意味し、$をエスケープしていることを

export xyzzy=plugh 
dosomething 
# Here xyzzy is still set. 

秒です。

試してみてください。

pax> yesterday=$(date --date="1 day ago" +%Y%m%d) 
pax> remote_file="76.99.20.129_${yesterday}.zip" 
pax> echo ${remote_file} 
76.99.20.129_20120105.zip 

は、私はあなたがはっきりと描写を見ることができるだけのようにアンダースコアを置きます。それを削除して、もともと意図した動作(私は思う)を得る。 ダブル\に上記

pax> yesterday=$(date --date="1 day ago" +%Y%m%d) 
pax> remote_file="76.99.20.129\\${yesterday}.zip" 
pax> echo ${remote_file} 
76.99.20.129\20120105.zip 

注:あなたがした後、実際にしている文字列がその中にバックスラッシュを持っている必要がある場合は、それは$に影響を与えないように

は、あなたはそれをエスケープする必要があります脱出を達成する。

また、環境変数名には{}が含まれています。これは、環境変数abcの内容に(たとえば)文字dを追加する場合の問題を避けるための良い習慣です。

コマンドecho $abcdは、abcdという環境変数の内容を表示しますが、必要なものはecho ${abc}dです。私はいつもこの明示的な記法を好む。

さらに、holygeekのおかげで、この場合はtr -d '\n'は本当に必要ではないので、削除しました。脱出する

+0

あなたは '' | tr -d '\ n' ''それは本当に必要ではないので、シェルがコマンド置換であなたのために自動的に行います。 – holygeek

1

使用${}

remote_file="76.99.20.129\\${yesterday}.zip" 
+0

Ooops、私は '\\\' –