![별칭의 매개변수를 한 번 사용한 후에는 어떻게 되나요? [복사]](https://linux55.com/image/46344/%EB%B3%84%EC%B9%AD%EC%9D%98%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%ED%95%9C%20%EB%B2%88%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%ED%9B%84%EC%97%90%EB%8A%94%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%90%98%EB%82%98%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
왜 이것은 arg
한 번만 인쇄됩니까?
$ alias test="echo $1 $1 $1"
$ test arg
arg
이는 GNU bash 버전 4.2.25(1) 릴리스(x86_64-pc-linux-gnu)에 있습니다.
답변1
alias
별칭을 정의한 후 명령을 사용하여 별칭을 나열하면 이를 명확하게 이해할 수 있습니다.
alias test="echo $1 $1 $1"
alias
산출:
alias test='echo '
단지 실행 시 정의된 변수만 포함하는 문자열로 확장됩니다. 예를 들어 다음은 작동합니다(Vvariable MY_VAR이 정의됨).
MY_VAR="foo"
alias test="echo $MY_VAR $MY_VAR $MY_VAR"
alias
산출:
alias test='echo foo foo foo'
기능으로 대체할 수 있습니다.
function test() {
echo $1 $1 $1
}
답변2
$1, $2,... 도움이 되는지 의심스럽습니다 alias
. 이에 대해서는 침묵합니다.
test arg
따라서 귀하의 명령은 으로 확장되었다고 생각합니다 echo $1 $1 $1 arg
. $1이 비어 있으면 결과를 얻을 수 있습니다.
또 다른 예를 들어보세요:
$ alias test='echo $1 $1 $1'
$ test arg1 arg2
arg1 arg2
위의 예에서는 alias test=...
get이 실행되고 최종 효과는 command 의 별칭을 얻는 것입니다 echo
. 명령을 실행하여 이 효과를 확인할 수 있습니다 test arg1 arg2
. 우리가 하는 일은 실행 echo
하고 문자열 arg1
sum 을 전달하는 것뿐입니다 arg2
.
$ echo arg1 arg2