2012-01-06 5 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

두 문제가 여기에 파일을 다운로드 할 수 있습니다. 첫 번째는 당신이 실제로 변수에 날짜 명령의 출력을 캡처하지 않을 것입니다 :

당신의 명령은 date 명령을 실행하는 동안 빈 문자열로 yesterday을 설정하는 것입니다하고 무엇
pax> yesterday= date --date="1 day ago" +%Y%m%d | tr -d '\n' 
[email protected]:~$ echo $yesterday 
<<no output>> 

, nifty bash 특징 나는 one-shot 환경 설정이라고 부르지 만, 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, 나는'\\\' –