2017-03-26 58 views
0

我試圖在系統升級之前創建一個簡單的備份腳本。在shell腳本內連接陣列以創建備份的文件路徑

我想要的將被用於使用焦油

我有接合所述陣列成一個單一的可變困難備份,然後得到串連到另一個變量(SOURCE_DIRS)文件路徑(BACKUP_DIRS)的陣列那是間隔的。

#!/bin/bash 

BACKUP_DIRS=(
~/.ssh/ 
~/workspace/ 
~/Downloads/ 
)    

# Concat paths 
SOURCE_DIRS='' 
for DIR in "${BACKUP_DIRS[@]}" 
do 
    $SOURCE_DIRS = $SOURCE_DIRS' '$DIR 
done 

# Backup 
tar -czf backup.tar.gz $SOURCE_DIRS 
+2

全大寫名稱由具有操作系統或shell本身意義的變量使用,而具有至少一個小寫字符的名稱的名稱空間保留供應用程序使用。相應地,您應該使用小寫名稱作爲自己的變量,以避免無意的衝突。請參閱http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html –

+1

順便說一句,考慮養成通過http://shellcheck.net/運行你的代碼的習慣,然後再問問題。 –

+0

要得到一個字符串,這就足夠了:'echo「$ {BACKUP_DIRS [*]}」'(IFS的默認值)。 – sorontar

回答

2

爲什麼要創建一個字符串SOURCE_DIRS時,你可以只使用

tar -czf backup.tar.gz "${BACKUP_DIRS[@]}" 

數組版本擴展到/my/first entry/the/second entry...其中一個字符串版本將被解釋爲/my/firstentry/the/secondentry...。因此,您的舊方法可能不會按照其中包含空格的路徑進行操作。

+0

肯定是更好的溶劑 – arithran