이것이 라인입니다.
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
합니다 . 일반적으로 말하면 이것은 나쁜 생각입니다.c
ls -1 $1
ls를 구문 분석하면 안 됩니다..