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

관련 정보