在bash函数中保留转义字符

时间:2014-10-19 20:39:22

标签: bash escaping special-characters argument-passing

我在尝试编写一个将文件移动到指定文件夹的简单bash函数时遇到了麻烦。我写的代码如下:

mv_file() {
  DESTINATION_FOLDER="~/Whatever"
  mv $1 $DESTINATION_FOLDER
}

但问题是,$1通常包含转义字符,例如~/\[Bracketed\]File,当传递给$1时,不再包含\字符,最终会查找~/[Bracketed]File 1}}这不是有效的文件/路径。我已经解决了有关此主题的其他问题,但我并不认为解决方案与此问题有关。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

似乎需要进行两项更改。首先,您可能想要替换:

DESTINATION_FOLDER="~/Whatever"

使用:

DESTINATION_FOLDER=~/"Whatever"

只有波形符号未加引号时,shell才会进行波形扩展。

其次,如果脚本的第一个参数被正确引用(问题中不清楚),那么你需要替换:

mv $1 $DESTINATION_FOLDER

使用:

mv "$1" "$DESTINATION_FOLDER"