[] 형식을 사용하여 단축하는 방법

[] 형식을 사용하여 단축하는 방법

한 줄로 줄이고 싶습니다.

if ls --version 2>/dev/null | grep -q 'coreutils'; then alias ls='ls --color=always'
else alias ls='ls -G'
fi

예를 들어 나는 종종 []조건문을 사용 [ -z(or -n) condition]하지만 이 형식으로 다른 부분을 실행해 본 적이 없습니다.

Ruby에서는 이것을 할 것입니다. condition ? true : false Bash에도 동등한 것이 있습니까?

나는 노력했다

[ -z ls --version 2>/dev/null | grep -q 'coreutils'] ? alias ls='ls --color=always' : alias ls='ls -G'

그러나 분명히 이것은 올바른 접근 방식이 아닙니다.

나는 모든 것을 .bashrc작은 창(<~50줄)에 맞추기를 원하기 때문에 한 줄을 원합니다. 따라서 다른 여러 줄 줄과 마찬가지로 가능한 한 한 줄로 압축하겠습니다. 이 예에서는 크기 때문에 가독성을 희생할 의향이 있습니다.

나는 또한 다음을 시도했습니다.

[ -z ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'

그리고

[ -n ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'

그리고

[ ls --version 2>/dev/null | grep -q 'coreutils'] && alias ls='ls --color=always' || alias ls='ls -G'

하지만 나는 항상 "then" 별칭 대신 "else" 별칭을 얻습니다.

되돌릴 수는 있지만 제대로 작동하지 않기 때문에 도움이 될지 의문입니다. 유일한 확실한 방법은 OSX에서 시도해 보는 것입니다. 저는 지금 우분투를 사용하고 있습니다.

답변1

너무 길어요 박사님;

사용

ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G'`

세부 정보...
[...]조건식만 평가해야 합니다(파일 통계, 문자열 비교, 숫자 비교, 참조 CONDITIONAL EXPRESSIONS) bash(1). 그들은 또한 건설에 필요합니다 if ... ; then ...; else.

비교적 간단한 구조의 경우

if CONDITION; then
    EXPR1
else
    EXPR2
fi

로 대체될 수 있다

CONDITION && EXPR1 || EXPR2

첫 번째 경우에 필요하지 않으면 [...]두 번째 경우에도 필요하지 않습니다.

귀하의 경우 CONDITION이것은 ls --version 2>/dev/null | grep -q 'coreutils'반환 코드입니다 grep. 그래서 당신은 쓸 수 있습니다

ls --version 2>/dev/null | grep -q 'coreutils' && alias ls='ls --color=always' || alias ls='ls -G'

ls참고: 지원되는지 직접 확인하는 것이 더 쉬울 것입니다 --color.

ls --color=always > /dev/null 2>&1 && alias ls='ls --color=always' || alias ls='ls -G'

답변2

를 사용하면 zsh다음과 같이 압축할 수 있습니다.

if {ls --version|&grep -q coreutils} {alias ls='ls --color=always'
} else {alias ls='ls -G'}

if/then/else의 대체 구성은 cmd1 && cmd2 || cmd3단순히 동일하지 않기 때문에 일반적으로 피해야 합니다.

존재하다

cmd1 && cmd2 || cmd3`

cmd2cmd1반환되면 실행합니다 true. 다음 조건 중 하나라도 충족되면 cmd3실행cmd1 또는cmd2거짓을 반환합니다.

귀하의 경우 cmd2( )가 false를 반환할 가능성은 거의 없지만 alias일반적인 경우에는 문제를 잊어버리기 쉽기 때문에 처음부터 해당 구성을 피하는 것이 가장 좋습니다.

오직진짜이것이 유용할 수 있는 이유는 구문이 다른 구문을 갖는 rcBourne 및 csh 유사 쉘(또는 유사한 쉘)에서 작동하는 코드를 작성하려는 경우입니다 .if/then/else

관련 정보