왜 이것은 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