한 줄에 있으면 배쉬


51

bash 스크립트 내부의 조건을 한 줄로 작성하는 방법을 알고 싶습니다.

예를 들어, 이것을 한 줄에 쓴 다음 다른 줄을 다음 줄에 어떻게 넣을 수 있습니까?

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

내 .bashrc에 꽤 많은 별칭이 있고 여러 시스템에서 동일한 .bashrc (동기화)가 있기 때문에이 질문을하지만 각 시스템에 모든 별칭이 필요하지는 않습니다. 나는 대부분의 경우 if 문 안에 넣었고, 이제는 아름답게 작동하지만 각각 3 줄과 그 사이에 빈 줄을 더 많이 사용합니다 (쉽게 표시하는 것을 좋아합니다)

또한이 기술을 환경 변수에도 사용합니다.


4
당신은 또한 쓸 수 있습니다[ -f "/usr/bin/wine" ] && export WINEARCH=win32
글렌 잭맨

3
짧을수록 더 나을 필요는 없습니다. 쉘의 논리 연산자로 미묘한 논리 오류를 얻을 수 있습니다. 읽고 유지하기 쉬운 것을 선택하십시오.
glenn jackman

답변:


84

다음과 같이 작성하십시오.

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

@glennjackman이 제안한대로 작성할 수도 있습니다.

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
글쎄 그것은 쉬웠다 ... :) 이제 나는 그것을 묻는 것이 다소 어색하다고 느낀다. 답변 tho에 감사합니다. 많이 도움이되었습니다!
Horațiu Mlendea

7
한 가지 차이점이 있습니다. 1. 표현식은 0 상태로 종료되고 2. 표현식은 파일이 없으면 0이 아닌 상태로 종료됩니다. 작업 성공이 명령의 종료 상태에 따라 달라지는 배포와 같은 일부 자동화 된 작업에서이 기능을 사용하면 차이가 생길 수 있습니다.
Jānis Gruzis

@ HorațiuMlendea는 분명히 쉬웠습니다. 당신이 방법을 알고 있다면. 그러나 구문은 어리 석다. 예를 들어 [1 == 1]은 오류이지만 [1 == 1]은 작동합니다. 그리고 세미콜론. 어리석게 디자인 된 구문을 모르면 어색한 느낌을받을 수 있습니다. 당신의 '느낌'은 전혀 의미가 없습니다. 불행히도 이유를 이해하지 못하는 경우에도 유용한 질문이었습니다.
barlop

@balop 아니오, 나는 당신이 의미하는 것을 완전히보고 동의합니다. 나는 그 구문을 구성하는 개별 비트 (&&를 가진 비트)를 이해했을 때입니다. 일반적으로 사물을 정리하는 것은 쉽고 직관적이지만, 말했듯이,이 언어는 아주 어리 석고 직관적이지 않습니다.
Horațiu Mlendea

4

또한 다른 명령을 입력하고 Enter 키를 누른 다음 실행 후 위쪽 화살표를 누르면 단지 복잡한 것을 입력한다는 것을 알았습니다. 명령 행은 물론 마지막에 입력 한 명령을 반복하지만이 경우 필요에 따라 모든 명령을 한 행에 넣습니다. 속임수이지만 효과적입니다.


5
이것은 쉘에 따라 (그리고 아마도 쉘 설정에 따라 다름) 유의하십시오. 내 컴퓨터에서 몇 가지 빠른 테스트를 통해이 작업이 Bash에서 작동하므로 (+1이 있음) Zsh는 이전 명령으로 돌아갈 때 줄 바꿈을 유지합니다.
8bittree
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.