由于目录名中有空格而导致Bash错误

由于目录名中有空格而导致Bash错误,bash,Bash,我得到一个Bash错误“预期的是二进制运算符”或“参数太多”,它指向第二行代码(if语句)。如果top_dir没有空格,错误就会消失。如果需要使用带空格的top_dir,如何修复此代码 log_dir="${top_dir}/${group}" if [ ! -d $log_dir ]; then mkdir -p "${log_dir}" fi 谢谢 如果更改您的,请从: if [ ! -d $log_dir ]; then 致: 使用[…]时,需要使用引号来防止扩展: if [

我得到一个Bash错误“预期的是二进制运算符”或“参数太多”,它指向第二行代码(if语句)。如果top_dir没有空格,错误就会消失。如果需要使用带空格的top_dir,如何修复此代码

log_dir="${top_dir}/${group}"
if [ ! -d $log_dir ]; then
    mkdir -p "${log_dir}"
fi

谢谢

如果更改您的
,请从:

if [ ! -d $log_dir ]; then
致:


使用
[…]
时,需要使用引号来防止扩展:

if [ ! -d "$log_dir" ]; then
使用
[…]]
可以省略引号,并且不会发生扩展:

if [[ ! -d $log_dir ]]; then
例如:

$ x='a b'
$ mkdir "$x"

$ [ -d "$x" ] && echo "$x exists"
a b exists

$ [[ -d $x ]] && echo "$x exists"
a b exists

这里不需要花括号;只有引用才重要。这是真的,但使用大括号是一个好习惯。这就是为什么我把它也加在这里。会自动识别并报告您的问题。哇,shellcheck.net是一个很好的资源。谢谢分享!
$ x='a b'
$ mkdir "$x"

$ [ -d "$x" ] && echo "$x exists"
a b exists

$ [[ -d $x ]] && echo "$x exists"
a b exists