2010-05-27 76 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.