지금까지 나는 쉘의 세미콜론이 (어쨌든) 줄 바꿈과 같은 의미를 가지고 있다고 생각했습니다. 그래서 나는 그것에 놀랐다.
alias <name>=<replacement text>; <name>
<name>
다음 줄에는 알려져 있지만 알 수 없습니다. csh
, tcsh
, sh
, ksh
및 bash
동일하게 동작합니다. 최소한 csh
별칭이 직접 사용되는지 또는 스크립트가 semccolon 이전에 제공되는지는 중요하지 않습니다. 별칭은 이후에 알려지지 않았지만 ;
다음 명령줄에서는 알려집니다. 이것은 버그입니까, 아니면 의도된 동작입니까?
답변1
사용 중인 별칭 구문은 POSIX 셸에 적합하지 않습니다. POSIX 셸의 경우 다음을 사용해야 합니다.
alias name='replacement'
그러나 모든 쉘의 경우 별명 대체가 파서 초기에 수행되므로 이는 작동하지 않습니다.
별칭 설정이 실행되기 전에 파서가 전체 줄을 읽었으므로 명령줄이 작동하지 않습니다.
별칭이 다음 명령줄에 나타나면 작동할 것입니다.
답변2
답변3
정말로 원한다면짧막 한 농담, 그러면 할 수 있습니다별칭 대신 함수 사용.
예를 들어 별칭을 만들었지 py3
만 두 번째 줄에서만 작동합니다.
$ alias py3=python3; py3 -c 'print("hello, world")'
Command 'py3' not found, did you mean:
command 'py' from deb pythonpy
command 'hy3' from deb python3-hy
command 'pyp' from deb pyp
Try: sudo apt install <deb name>
$ py3 -c 'print("hello, world")'
hello, world
다음 대신에 다음 py3
과 같이 정의할 수 있습니다 .function
alias
$ function py3() { python3 "$@"; }; py3 -c 'print("hello, world")'
hello, world
또는 export -f
나중에 하위 프로세스에서 사용되기 전에:
$ function py3() { python3 "$@"; }; export -f py3; bash -c "py3 -c 'print("'"hello, world"'")'"
hello, world
그리고 차이점을 알고 계시다면변수 대 별칭/함수, 그런 다음 사용할 수 있습니다변하기 쉬운도:
$ py3='python3'; $py3 -c 'print("hello, world")'
hello, world
그리고 필요하지 않습니다 export -f
:
$ py3='python3'; bash -c "$py3 -c 'print("'"hello, world"'")'"
hello, world