~에 따르면이 답변...
명령은 매개변수라는 문자열 배열로 분할됩니다. 매개변수 0은 (일반적으로) 명령 이름이고, 매개변수 1은 명령 다음의 첫 번째 요소입니다.
$ ls -la /tmp /var/tmp arg0 = ls arg1 = -la arg2 = /tmp arg3 = /var/tmp
각 매개변수를 출력할 수 있나요? 에코를 사용하여 표현해 보겠습니다.
명령을 실행한 후 및를 사용했지만 echo $@
실제로 작동하지 않습니다.echo $0 $1 $2 $3
ls -la /tmp /var/tmp
나도 이것을 시도했지만 > /dev/null
작동하지 않았습니다. (아래와 똑같은 결과가 나옵니다)
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $@
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $0
bash
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $1
user@linux:~$
user@linux:~$ ls -la /tmp /var/tmp > /dev/null
user@linux:~$ echo $0 $1 $2 $3
bash
user@linux:~$
원하는 출력
실행 후 터미널 화면에 다음 출력이 표시될 것으로 예상됩니다.ls -la /tmp /var/tmp
입력하다
ls -la /tmp /var/tmp
산출
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
답변1
echo $0은 귀하의 예에서 "bash"를 출력합니다. 쉘에 있을 때 bash가 실행 중이기 때문에 이는 사실입니다.
액세스하려는 매개변수가 명령에 제공되었습니다 ls
. 반환되고 프롬프트가 나타나면 매개변수가 사라진 것입니다.
다음 줄을 포함하는 파일("스크립트")을 만든 후
echo $0 $1 $2
소싱을 통해 호출합니다.
. myecho.cmd a b c d
...당신은 다음을 얻습니다:
bash a b
실행 가능하게 만든 후(경로 디렉터리에 #! 첫 번째 줄, chmod, cp 추가) 직접 호출할 수 있습니다.
myecho.cmd a b c d
이제 $0은 새 명령의 이름입니다.
/usr/local/bin/myecho.cmd a b
(눈에 띄게 하기 위해 .cmd라고 불렀습니다. "에코"라고 부르지 마세요.)