Bash:对包含空格的变量使用 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这种奇怪行为的方法?

你为什么不...

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"

相关内容

  • 没有找到相关文章

最新更新