带变量的bash副本

时间:2010-05-27 15:02:34

标签: bash macos

我正在尝试使用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"

2 个答案:

答案 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.