#!/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
2012010476.99.20.129$yesterday.zip
はここで何が起こっていますか?
私はwgetの呼び出しに、この変数を渡すと、自動的にファイル
#!/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
2012010476.99.20.129$yesterday.zip
はここで何が起こっていますか?
私はwgetの呼び出しに、この変数を渡すと、自動的にファイル
ここで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'
は本当に必要ではないので、削除しました。脱出する
あなたは '' | tr -d '\ n' ''それは本当に必要ではないので、シェルがコマンド置換であなたのために自動的に行います。 – holygeek
使用${}
:
remote_file="76.99.20.129\\${yesterday}.zip"
Ooops、私は '\\\' –
私はREMOTE_FILEみました=「76.99.20.129 \/$ yesterday.zip」 – jeremyforan
これはあなたのコードのコピー&ペーストですかこの再入力されますか?私はそれが再入力されたと思われる十分な間違いがあるように感じる。私は実際には存在しなかったコードをデバッグするのは好きではありません。ありがとう。 – sarnold
取得したい正確な出力は何ですか?目標は何ですか? –