Bash: 在包含空格的变量上使用 cd 命令
Bash: use cd command on a variable including spaces
我正在尝试更改脚本中的目录,以便使用相对路径执行一系列操作。该文件夹是一个名为 $input_path
:
的变量
cd $(echo "$input_path")
如果变量中有space,例如“/home/user/testdirectory/subfolder”,脚本returns报错:
./test_currently_broken.sh: line 86: cd: "/home/user/test: No such
file or directory
我试过各种方法来逃避 spaces:
# 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 "\"" [=13=] "\""}')
或
# wrap in single quotes using sed
input_path=$(echo "$input_path" | sed -e "s/\(.*\)/''/")#
但是 none 修复了错误 - 它仍然无法更改目录。
我已经确认它试图更改为 肯定 的目录存在,并且 cd
ing 在这个脚本之外工作。
cd
的这种奇怪行为是否有解决方案?
你为什么不...
cd "$input_path"
既然是引号,就不会有空格问题
你说 cd $(echo "$input_path")
实际上是在说 cd my path
,而你想说 cd "my path"
。因此,正如下面 JID 所评论的,您也可以说 cd "$(echo $input_path)"
,因为重要的报价是 "closer" 到 cd
.
如果不引用,cd
看到:
cd my path
所以它会尝试 cd my
,而如果你引用它会看到:
cd "my path"
我正在尝试更改脚本中的目录,以便使用相对路径执行一系列操作。该文件夹是一个名为 $input_path
:
cd $(echo "$input_path")
如果变量中有space,例如“/home/user/testdirectory/subfolder”,脚本returns报错:
./test_currently_broken.sh: line 86: cd: "/home/user/test: No such file or directory
我试过各种方法来逃避 spaces:
# 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 "\"" [=13=] "\""}')
或
# wrap in single quotes using sed
input_path=$(echo "$input_path" | sed -e "s/\(.*\)/''/")#
但是 none 修复了错误 - 它仍然无法更改目录。
我已经确认它试图更改为 肯定 的目录存在,并且 cd
ing 在这个脚本之外工作。
cd
的这种奇怪行为是否有解决方案?
你为什么不...
cd "$input_path"
既然是引号,就不会有空格问题
你说 cd $(echo "$input_path")
实际上是在说 cd my path
,而你想说 cd "my path"
。因此,正如下面 JID 所评论的,您也可以说 cd "$(echo $input_path)"
,因为重要的报价是 "closer" 到 cd
.
如果不引用,cd
看到:
cd my path
所以它会尝试 cd my
,而如果你引用它会看到:
cd "my path"