Tom*_*ett 0 bash shell awk cd sed
我试图更改脚本中的目录,以便使用相对路径执行一系列操作.该文件夹是一个名为的变量$input_path:
cd $(echo "$input_path")
Run Code Online (Sandbox Code Playgroud)
如果变量中有空格,例如"/ 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')
Run Code Online (Sandbox Code Playgroud)
要么
# wrap input path with awk to add quotes
input_path=$(echo "$input_path" | awk '{print "\"" $0 "\""}')
Run Code Online (Sandbox Code Playgroud)
要么
# wrap in single quotes using sed
input_path=$(echo "$input_path" | sed -e "s/\(.*\)/'\1'/")#
Run Code Online (Sandbox Code Playgroud)
但没有人修复错误 - 它仍然无法更改目录.我已经确认它尝试更改的目录肯定存在,并且cding在此脚本之外工作.
有这种奇怪行为的解决方案cd吗?
你为什么不......
cd "$input_path"
Run Code Online (Sandbox Code Playgroud)
因为引用,空格不会有任何问题.
通过说cd $(echo "$input_path")你实际上说cd my path,而你想做cd "my path".因此,正如下面JID所评论的那样,你也可以说,cd "$(echo $input_path)"因为重要的引号是"更接近"的引号cd.
如果你不引用,cd请看:
cd my path
Run Code Online (Sandbox Code Playgroud)
所以它试图cd my,而如果你引用它看到:
cd "my path"
Run Code Online (Sandbox Code Playgroud)