【发布时间】:2016-02-05 19:37:00
【问题描述】:
我在 ~/.bashrc 文件中编写了一个函数来清理 cmets 的配置文件。函数如下:
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)
【问题讨论】:
-
choroba 的回答是正确的,但请注意,您可以使用
CLEANCHAR=${2-#}来简化代码。另请注意,如果您指定的 CLEANCHAR 是正则表达式元字符,该函数将无法正常工作。
标签: bash escaping .bash-profile