web-dev-qa-db-ja.com

ネストされた[]を使用して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
3
Michael Durrant

チェーンするだけです&&'s、する必要はありませんネストここで条件文:

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

動作します。

4
gniourf_gniourf

2つのコマンドを混同します。 [ifと同等ではありません。 [testと同等です。

ifは単純なコマンドではなく、制御構造の一部である予約語([[など)です。 if ... then ... else ... fi... && { ...; true; } || { ... }とほぼ同等です

3
Hauke Laging