2010-05-27 81 views
2

我想使用bash腳本將文件複製到當前目錄。bash副本與變量

爲了處理需要轉義的路徑,使用了一個被轉義並提供給cp命令的變量。

cp命令與抱怨:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file 
     cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory 

我知道是什麼意思,但我不明白,爲什麼出現這種情況。

下面是代碼:

z="https://stackoverflow.com/a/b/c d (e) f.txt" 
y=`printf %q "$z"` 
cp $y x.txt  # not working as expected 
echo cp $y x.txt # output is "cp /a/b/c\ d\ \(e\)\ f.txt x.txt" 

回答

5

注意:當你在與一個bash腳本的麻煩,你應該用-x選擇,因爲它提供了調試的第一級運行。

轉義文件名是不正確的。您應該使用:

cp "$z" x.txt 
3

你能避免y乾脆使用引號:

cp "$z" x.txt 

這是因爲符號化變量替換後發生。另一種可能性是更改字段分隔符:

IFS="" # Set special variable denoting field separator (defaults to whitespace). 
cp $y x.txt # Works as you intended.