예를 들어, 이것이 작동하는 동안 :
$ 에코 푸 푸
이것은하지 않습니다 :
$ / bin / sh -c 에코 foo
반면에 :
$ / bin / sh -c '에코 foo; 에코 바 푸 바
설명이 있습니까?
예를 들어, 이것이 작동하는 동안 :
$ 에코 푸 푸
이것은하지 않습니다 :
$ / bin / sh -c 에코 foo
반면에 :
$ / bin / sh -c '에코 foo; 에코 바 푸 바
설명이 있습니까?
답변:
에서 man sh
-c string If the -c option is present, then commands are read from string.
If there are arguments after the string, they are assigned to the
positional parameters, starting with $0
그것은 당신의 명령이 다음과 같아야 함을 의미합니다.
$ sh -c 'echo "$0"' foo
foo
비슷하게:
$ sh -c 'echo "$0 $1"' foo bar
foo bar
그것은 가장 먼저 이해해야 할 부분이었습니다. 두 번째 경우는 간단하며 설명이 필요하지 않습니다.
sh -c 'echo "$@"' fnord a b c d ...
sh -c 'echo $0' foo
질문자가 이미 알고있는 것을 고려하여, 최고의 옵션이 아닙니다 /bin/sh -c 'echo foo; echo bar'
당신은 단순히 명령 인용 대답 할 수있는 작업을 시작/bin/sh -c 'echo foo'
$ echo foo
foo
echo
인수 foo 와 함께 호출 하면 foo 가 인쇄됩니다.
$ /bin/sh -c echo foo
이것은 인수 echo
와 함께 쉘을 호출하고 인수로 foo 를
제공합니다 $0
. 는 echo
새로운 라인을 출력하고 당신은 폐기 foo는 . foo 를 출력 하려면 인수를 인용하십시오.
sh -c 'echo foo'
또는 제공된 인수를 사용하십시오.
sh -c 'echo $0' foo
이 예에서
$ /bin/sh -c 'echo foo; echo bar'
foo
bar
쉘은 echo foo; echo bar
출력 하는 인수와 함께 호출됩니다.
foo
bar
이 명령에서 :
echo foo
echo
이진 (또는 내장 명령)이며 foo
첫 번째 인수입니다.
여기:
/bin/sh -c echo foo
/bin/sh
이진은 첫 번째 인수는 -c
"명령 문자열"을 매개 변수로 사용합니다. 이다 echo
위의 예. : 그럼 세 번째 인수가 foo
에 대한 인수입니다 /bin/sh
하지 않는가 echo
. 이것이 세 번째 예의 이유입니다.
/bin/sh -c 'echo foo; echo bar'
... 모두 인쇄됩니다. 당신은 논쟁을 인용했습니다. 따라서 첫 번째 인수는이며이 인수 -c
의 매개 변수 'echo foo; echo bar'
는 전체를 하나의 인수로 해석합니다. "명령 문자열"로.
구조 sh -c word
는 단어 (쉘에서) 만 실행합니다.
추가 된 단어는 인수 0, 1, 2 등과 같은 다른 것을 의미합니다.
sh -c word zero one two three
공백이 하나의 단어로 된 명령을 유지하려면 인용이 필요합니다.
sh -c 'echo fnord' zero one two three
따라서 모든 인수를 인쇄합니다.
$ sh -c 'echo "args=" "$0" "$@"' zero one two three
args = zero one two three
제시 한 예에서 : /bin/sh -c echo foo
첫 번째 단어 (옵션 후) echo
는 바로 그 단어 입니다. 그리고 텍스트가없는 에코는 개행 만 인쇄하며 다른 것은 없습니다.
$ / bin / sh -c 에코 foo
그래서 빈 줄이 생깁니다.
공백을 인용하면 다음과 같이 "한 단어"(공백 없음)가 실행됩니다.
$ / bin / sh -c echo \ foo 푸 $ / bin / sh -c "에코 푸" 푸 $ / bin / sh -c '에코 푸' 푸
인용 부호를 사용하여 실행 된 명령을 "단어"로 유지하십시오.
sh -c 'echo $1' echo foo