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

时间:2018-01-24 00:30:55

标签: bash

我收到“二元运算符预期”或“太多参数”的Bash错误,它指向第二行代码(if语句)。如果top_dir没有空格,则错误消失。如果我需要使用带空格的top_dir,我该如何修复此代码?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

更改您的if,来自:

if [ ! -d $log_dir ]; then

为:

if [ ! -d "${log_dir}" ]; then

答案 1 :(得分:1)

使用[ ... ],您需要引号以防止扩展:

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