나는 이것을 하나의 라이너로 줄이고 싶습니다.
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
tl;dr;
사용
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`
cmd2
cmd1
반환 되면 실행됩니다 true
. 그리고 cmd3
다음 중 하나라도 실행됩니다.cmd1
또는cmd2
거짓을 반환합니다.
귀하의 경우 cmd2
( alias
)는 false를 반환할 가능성이 거의 없지만 일반적인 경우 문제를 잊어버리기 쉽기 때문에 처음부터 해당 구성을 피하는 것이 가장 좋습니다.
유일한진짜이것이 유용할 수 있는 이유는 구성이 다른 구문을 갖는 Bourne 및 csh 유사 쉘(또는 rc
작동하는 쉘과 유사한 쉘) 모두에서 작동하는 코드를 작성하려는 경우입니다 .if/then/else