Bash에서 명령 대체에는 큰따옴표를 사용해야 합니다.
$ echo "$(date)"
Fri Oct 28 19:16:40 EDT 2016
작은따옴표는 명령 대체를 수행하지 않습니다.
$ echo '$(date)'
$(date)
alias
...그렇다면 작은따옴표로 명령 대체가 발생하고 있음을 나타내는 다음과 같은 동작이 나타나는 이유는 무엇입니까 ?
alias d='$(date)'
$ d
No command 'Fri' found, did you mean:
....
답변1
작은따옴표 및 큰따옴표 버전
작은따옴표를 사용하여 별칭을 정의해 보겠습니다.
$ alias d='$(date)'
이제 별칭의 정의를 검색해 보겠습니다.
$ alias d
alias d='$(date)'
아직 명령 대체가 수행되지 않았습니다.
동일한 작업을 수행해 보겠습니다. 단, 이번에는 큰따옴표를 사용합니다.
$ alias d="$(date)"
$ alias d
alias d='Fri Oct 28 17:01:12 PDT 2016'
큰따옴표를 사용하기 때문에 별칭이 정의되기 전에 명령 대체가 수행됩니다.
작은따옴표 버전
작은따옴표 버전을 실행해 보겠습니다.
$ alias d='$(date)'
$ d
bash: Fri: command not found
작은따옴표 버전은 다음을 실행하는 것과 동일합니다.
$ $(date)
bash: Fri: command not found
두 경우 모두 명령이 실행될 때 명령 대체가 수행됩니다.
변종
명령 대체와 작은따옴표를 사용하여 정의된 이 별칭을 고려해 보겠습니다.
$ alias e='echo $(date)'
$ e
Fri Oct 28 17:05:29 PDT 2016
$ e
Fri Oct 28 17:05:35 PDT 2016
이 명령을 실행할 때마다 date
다시 평가됩니다. 작은따옴표를 사용하면 별칭이 정의될 때가 아니라 별칭이 실행될 때 명령 대체가 수행됩니다.
답변2
별칭을 정의할 때 큰따옴표를 사용하면 다음에서 매개변수 확장이 발생합니다.별칭 정의시간.
예를 들어:
$ pwd
/tmp
$ echo $PWD
/tmp
$ alias p="echo $PWD"
$ p
/tmp
$ cd /
$ pwd
/
$ p
/tmp
$ alias p
alias p='echo /tmp'
$
매개변수 확장을 원하는 경우부르다별칭, 별칭을 정의할 때 작은따옴표를 사용하세요.
$ alias p='echo $PWD'
$ p
/tmp
$ cd /
$ p
/
$
물론 절대로어느이 명령을 실행하는 이유입니다 . 나는 당신이 이것을 단지 예로 사용하고 있다는 것을 알고 있지만 이것을 "야생에서" 여러 번 보았으므로 어쨌든 명확하게 설명하겠습니다. 이것이 무엇을 의미하는지 명령을 실행 echo "$(date)"
date
하고 출력을 캡처합니다(후행 줄 바꿈 제거). . 캡처된 출력은 echo
단일 후행 개행과 함께 인쇄하는 명령에 인수로 전달됩니다. 직접 실행하는 것보다 이점이 없습니다 date
.
그러나 여기에는 다른 문제도 있습니다.
별칭을 설정한 후 d='$(date)'
입력하면 명령줄에 입력한 텍스트의 결과를 얻게 됩니다 d
. 명령이 실행되고 출력이 캡처되고 후행 줄 바꿈이 제거된 다음 출력이 다음으로 구문 분석됩니다. 명령 셸(토큰화 및 파일 전역 확장 포함)$(date)
date
오늘은 금요일이므로 첫 번째 단어 출력 date
은 "Fri"이므로 쉘은 이를 명령으로 실행하려고 시도합니다.
당신이 원하는 것이 있다면바라보다날짜를 입력하려면 d
다음을 사용하세요.
alias d=date
또는
alias d='date'
또는
alias d="date"
특수 문자에는 인용 형식이 필요하지 않으므로 어떤 형식을 사용하는지는 중요하지 않습니다.
답변3
그런 일이 일어나고 있나요 ~/.bashrc
? 내부에 댓글 섹션이 있습니다.~/.bashrc
95 # Alias definitions.
96 # You may want to put all your additions into a separate file like
97 # ~/.bash_aliases, instead of adding them here directly.
98 # See /usr/share/doc/bash-doc/examples in the bash-doc package.
이것이 바로 다른 추천 파일을 바로가기로 사용하는 이유입니다.
이것~/.bash_aliases
핵심은 작은따옴표를 이스케이프 처리하는 것입니다.
# I use vim but nano or gedit is also fine
vim ~/.bashrc # or vim ~/.bash_aliases
# create your alias:
alias d=''\'date''\'
# or
alias dd="'date'"
# or
alias ddd='"date"'
그런 다음 새 터미널 세션을 열고 d
원하는 작업을 수행하십시오.