작은따옴표 안의 명령 대체 별칭

작은따옴표 안의 명령 대체 별칭

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원하는 작업을 수행하십시오.

관련 정보