2015-08-30 56 views
0

當複製命令不工作我寫了一個bash腳本:追加日期

date=$(date +%F) 
cp $1 $1_$date 

當這樣寫的,並提供了一個參數,它工作正常。但是,如果我寫的:

cp $1 $date_$1 

我得到一個錯誤信息:

CP: '1.sh' 和 '1.sh' 是同一個文件

有人能解釋請給我,爲什麼會發生,以及如何解決。謝謝!

+2

CP 1 $ $日期 「_ $ 1」 的作品。這種方式bash知道當一個變量名稱結束,另一個開始 – amdixon

+3

使用$ {date}它告訴哪裏變量結束 –

+2

不嚴格重複(雖然我敢肯定我們可以找到一個)但解釋是在http:// stackoverflow .com/questions/8748831/bash-when-do-we-need-curly-braces-in-variables – tripleee

回答

3

問題是_是變量名中完全有效的字符。

改寫這樣的:

cp $1 ${date}_$1 

發生了什麼事是$date_值(注意尾隨_),可能是空的。所以你的命令變得真的cp $1 $1。通過使用大括號,我們澄清變量的名稱是「日期」而不是「日期_」。

你也應該引用中使用的變量是文件名,如果包含空格:

cp "$1" "${date}_$1" 
+0

第一個不需要大括號,因爲'1_'不是有效的參數名稱。 – chepner

+0

謝謝@chepner,我應該先測試一下: - /刪除了這一點。 – janos

相關問題