Bash:对包含空格

时间:2015-04-23 10:26:02

标签: bash shell awk sed cd

我正在尝试更改脚本中的目录,以便使用相对路径执行一系列操作。该文件夹是名为$input_path的变量:

cd $(echo "$input_path")

如果变量中有空格,例如“/ home / user / test directory / subfolder”,脚本将返回错误:

  

./ test_currently_broken.sh:86行:cd:“/ home / user / test:没有这样的   文件或目录

我尝试了各种方法来逃避空间:

# escape spaces using backslashes, using sed
input_path=$(echo "$input_path" | sed 's/ /\\ /g')

# wrap input path with awk to add quotes
input_path=$(echo "$input_path" | awk '{print "\"" $0 "\""}')

# wrap in single quotes using sed
input_path=$(echo "$input_path" | sed -e "s/\(.*\)/'\1'/")#

但没有人修复错误 - 它仍然无法更改目录。 我已经确认它尝试更改为肯定的目录存在,并且cd在此脚本之外工作。

cd的这种奇怪行为是否有解决方案?

1 个答案:

答案 0 :(得分:5)

你为什么不......

cd "$input_path"

因为它被引用,空格不会有任何问题。

cd $(echo "$input_path")你实际上是在说cd my path,而你想做cd "my path"。因此,正如下面JID所评论的那样,您也可以说cd "$(echo $input_path)"因为重要的引号是“更接近”cd的引号。

如果您不引用,cd会看到:

cd my path

所以它尝试cd my,而如果你引用它,则会看到:

cd "my path"