쉘, 배시, 리눅스 ; 변수 선언 뒤에 세미콜론이 필요한 이유와 그 기능은 무엇입니까?

쉘, 배시, 리눅스 ; 변수 선언 뒤에 세미콜론이 필요한 이유와 그 기능은 무엇입니까?

여기에 라인이 있습니다.

    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줄을 찾은 다음 의 단일 열 출력을 인쇄합니다 . 일반적으로 이것은 나쁜 생각입니다.abcls -1 $1ls를 구문 분석하면 안 됩니다..

관련 정보