Bash 输出缺少“]”错误

Bash missing ']' error for output

我在 ~/.bashrc 文件中编写了一个函数来清除配置文件的注释。函数如下:

clean_config()
{
    [ -z ""] && CLEANCHAR="#" || CLEANCHAR=""
    egrep -v "^[[:space:]]*${CLEANCHAR}|^$" "" | uniq
}

基本上它声明如果用户没有传递第二个参数,使用 # 作为注释字符来查找和清理。第一个参数只是文件本身。函数 "works" 但是当我 运行 它以 ; 作为要清理的字符时,我得到以下信息:

[root@server]: /etc/php5/fpm/pool.d # clean_config www.conf \;
bash: [: missing `]'
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data

它可以很好地转义字符,但我总是在顶部看到 bash: [: missing ']' 行。我尝试将其更改为 [[ -z ""]],但这会导致 bash.bashrc 根本无法加载。

有什么想法吗?版本信息如下:

[root@server]: ~ # bash --version | head -n1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

关闭]前的space不可选:

[ -z "" ]
#        ^

没有它,命令只有在</code>为空时才OK,所以变成了<code>[ -z ]

同样适用于[[ ... ]],但你不必引用里面的变量:

[[ -z  ]]

bash parameter expansions提供这种"default value"作业:

$ set -- x "second arg"
$ CLEANCHAR=${2:-#}
$ echo "$CLEANCHAR"
second arg

$ set -- x
$ CLEANCHAR=${2:-#}
$ echo "$CLEANCHAR"
#

$ set -- x ""
$ CLEANCHAR=${2:-#}
$ echo "$CLEANCHAR"
#

${x:-default} 表示:如果 $x 未设置或为空,则使用 "default" 值