Bash Shellscript反斜杠和间隔参数
所以,我想做的是,如果用户没有将路径作为参数传递给脚本,脚本将使用当前目录。如果传递了一条路径,请改用它Bash Shellscript反斜杠和间隔参数,bash,shell,ubuntu,Bash,Shell,Ubuntu,所以,我想做的是,如果用户没有将路径作为参数传递给脚本,脚本将使用当前目录。如果传递了一条路径,请改用它 instdir="$(pwd)/" if [ -n "$1" ] ; then instdir="$1" fi cd $instdir 错误 /script.sh/path/to/a\folder/ 输出:cd:/path/to/a:未找到文件或文件夹 /script.sh”/path/to/a\folder/“ 输出:cd:/path/to/a \:未找到文件或文件夹 我做错了什么?
instdir="$(pwd)/"
if [ -n "$1" ] ; then
instdir="$1"
fi
cd $instdir
错误
/script.sh/path/to/a\folder/
输出:cd:/path/to/a:未找到文件或文件夹
/script.sh”/path/to/a\folder/“
输出:cd:/path/to/a \:未找到文件或文件夹
我做错了什么?将
cd$instdir
更改为cd“$instdir”
应该可以解决这个问题。如果没有引号,a
和文件夹
的a文件夹
部分被视为单独的参数
注意,不要用三行if
语句设置instdir
,而是写:
[ "$1" ] && instdir="$1"
如果传递的路径中包含空格作为参数,则会导致问题。如果不是现在,那么是将来。我建议您执行以下操作(前提是路径是唯一的参数):
我不会建议最后一个,如果没有明确的注释,“更长”的if语句更易于阅读和维护。如果它是一个小脚本,它是好的。但是一个更大的、专业编写的、大规模分布的安装脚本——不可能。
instdir="$(pwd)"
if [[ -d "$@" ]]; then
instdir="$@"
fi
cd "$instdir"