如何使用嵌套 [] 替换 if-then-fi ? (“[:-f:预期二元运算符”)

如何使用嵌套 [] 替换 if-then-fi ? (“[:-f:预期二元运算符”)

在我的 .bashrc 文件中,我有:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then . /etc/bash_completion; fi

我想用[]它来代替if then fi

我已经有了

[ -f ~/.bash_aliases ] && source ~/.bash_aliases
[ "${BASH_VERSINFO[0]}" -ge 4 ] && shopt -s autocd
[ -f ~/.git-completion.bash ] && source ~/.git-completion.bash

所以我想也许我可以用

[ [ -f /etc/bash_completion ] && [! shopt -oq posix] ] && . /etc/bash_completion

但我得到

-bash: [: -f: binary operator expected

答案1

你可以直接连锁&&,不需要这里的条件:

[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion

作品。

答案2

您混淆了两个命令。[不等于if.[相当于test.

if甚至不是一个简单的命令,而是一个保留字(如[[),控制结构的一部分。if ... then ... else ... fi几乎等于... && { ...; true; } || { ... }

相关内容