我正在尝试使用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="/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"
答案 0 :(得分:5)
注意:当您遇到bash脚本问题时,应该使用-x
选项运行它,因为它提供了第一级调试。
文件名的转义不正确。你应该使用:
cp "$z" x.txt
答案 1 :(得分:3)
您可以完全避免使用y
并使用引号:
cp "$z" x.txt
这是因为变量替换后会发生标记化。另一种可能性是更改字段分隔符:
IFS="" # Set special variable denoting field separator (defaults to whitespace).
cp $y x.txt # Works as you intended.