【问题标题】:Bash error due to space in directory name [duplicate]由于目录名称中的空格导致的 Bash 错误 [重复]
【发布时间】:2018-01-24 08:43:53
【问题描述】:

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

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

谢谢!

【问题讨论】:

  • shellcheck.net 会自动识别并报告您的问题。
  • 哇,shellcheck.net 是一个很棒的资源。感谢分享!

标签: bash


【解决方案1】:

将您的 if 更改为:

if [ ! -d $log_dir ]; then

到:

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

【讨论】:

  • 这里不需要大括号;重要的是引号。
  • 确实如此,但使用花括号是一个好习惯。这也是我在这里添加它的原因。
【解决方案2】:

[ ... ] 需要引号来防止扩展:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多