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

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

基本上,它声明如果用户不传递第二个参数,则使用#作为注释字符来查找和清除。第一个参数只是文件本身。函数“工作”,但是当我用;作为要清理的字符运行它时,我得到以下结果:
[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 "$2"]],但这会导致bash.bashrc根本不加载。
有什么想法吗?版本信息如下:
[root@server]: ~ # bash --version | head -n1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

最佳答案

关闭前的空间]不是可选的:

[ -z "$2" ]
#        ^

没有它,命令只有在$2为空时才正常,因此它变为[ -z ]
这同样适用于[[ ... ]],但您不必引用其中的变量:
[[ -z $2 ]]

关于bash - 重击缺少输出的']'错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35232140/

10-11 06:30