代码之家  ›  专栏  ›  技术社区  ›  zaf

带变量的bash copy

  •  2
  • zaf  · 技术社区  · 14 年前

    我正在尝试使用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 回复  |  直到 14 年前
        1
  •  5
  •   Laurent Etiemble    14 年前

    注意:当bash脚本出现问题时,应该使用 -x 选项,因为它提供了第一级调试。

    文件名转义不正确。你应该使用:

    cp "$z" x.txt
    
        2
  •  3
  •   Stephen    14 年前

    你可以避免 y 全部使用引号:

    cp "$z" x.txt
    

    这是因为标记化技术发生在变量替换之后。另一种可能是更改字段分隔符:

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