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; } || { ... }

関連情報