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"