Shell, bash, Linux; 변수 선언 후 세미콜론을 추가해야 하는 이유는 무엇입니까?

Shell, bash, Linux; 변수 선언 후 세미콜론을 추가해야 하는 이유는 무엇입니까?

이것이 라인입니다.

    variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

세미콜론 앞의 줄은 이해하지만 세미콜론 뒤의 줄은 어떻게 작동하는지 이해하지 못합니다. 할 수 있다

  after the command(variable assignment) 
  and then run the command after semi-colon?

그렇다면 다음 행은 동일할까요?

    variable=`ls -A $1 | grep '[abc]' | ls -1 $1`

감사해요,

답변1

세미콜론은 단순히 두 개의 연속된 명령을 구분합니다. 맨페이지( man bash)에는 다음과 같이 나와 있습니다.목록):

;를 사용하여 명령을 분리하고 차례로 실행합니다.

예를 들어 다음은 명령을 먼저 실행 foo한 다음 명령을 실행합니다 bar.

foo; bar

예제를 올바르게 구문 분석하려면 먼저 계층적 모델을 구축해야 합니다.

 variable=`ls -A $1 | grep '[abc]'; ls -1 $1`

(백틱 안에 있는 것)과 (백틱 안에 있는 것)으로 분해될 수 있습니다.variable=...ls -A $1 | grep '[abc]'; ls -1 $1

백틱은 명령의 출력을 얻는 데 사용됩니다(참조:명령 대체) man bash; 따라서 전체 출력을 ls -A $1 | grep '[abc]'; ls -1 $1변수에 할당합니다.

바꾸기 명령의 출력은 특정 패턴(숨겨진 방패 포함)과 일치하는 파일 목록이며 전체 파일 목록(사용 가능한 모든 것...)이 추가됩니다.

답변2

아니요, 그들은 동일하지 않습니다. 후자는 파이프를 통해 들어옵니다 grep( ls거의 확실히 원하는 것은 아닙니다). 세미콜론은 단순히 두 개의 다른 명령을 구분합니다.

먼저, 사용을 시작하고 싶을 수도 있습니다.$( ... )백틱 대신 더 새롭고 유연함.

예로서:

$ var=`echo foo; echo bar`
$ echo "$var"
foo
bar

$( ... )백틱(또는 )은 그 사이에 포함된 코드를 실행하는 동안 표준 출력에 인쇄된 내용을 반환하는 것으로 생각할 수 있습니다 .

귀하의 경우 출력을 한 번 살펴보고 ls -A $1출력에서 ​​또는 을 포함하는 줄을 찾은 a다음 출력의 단일 열을 인쇄 b합니다 . 일반적으로 말하면 이것은 나쁜 생각입니다.cls -1 $1ls를 구문 분석하면 안 됩니다..

관련 정보