쉘의 “quote”명령 없습니다. echo명령과 같은

명령 사용법은 무엇입니까 quote? /bin폴더에 대한 실행 파일이 아니며 Bash 내장 파일에서 찾을 수 없습니다. echo명령과 같은 첫 번째 매개 변수 만 인쇄하고 더 이상 아무것도 인쇄 하지 않는 것 같습니다.



답변

무엇입니까?

나는이 명령이 내 껍질 ( 물고기, 대화 형 대화 형 쉘 ) 에서 작동하지 않는 것을 알았습니다 . bash에서만 작동하는 것 같습니다 (Ubuntu의 기본값).

chocobai@pc ~> /bin/bash
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$

chocobai@pc:~$ type quote
quote is a function.
quote ()
{
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

무엇을합니까? 무엇을 위해 사용할 수 있습니까?

따옴표를 추가하지만 개행은 추가하지 않습니다. 또한 bash에 적합한 방식으로 작은 따옴표를 이스케이프 처리합니다. 스크립트에서 변수 또는 다른 종류의 문자열을 인용하는 것이 유용 할 수 있습니다. 예를 들어 공백이있는 경로 / 매개 변수의 경우이가 필요합니다. 이 작업을 수행하는 다른 방법이 있지만

웹에서 문서를 찾을 수 없다는 것이 정말 이상합니다. 그러나 그것이 무엇을하는지는 쉽게 알 수 있습니다.


답변

quote파일에 정의 된 함수입니다 (여기서는 데비안 시스템에 있지만 우분투에서 동일하다고 생각합니다). /usr/share/bash-completion/bash_completion그 자체는 /etc/bash.bashrcBash가 시작할 때 제공됩니다 .

나는이 기능을 절대로 사용하지 않을 것이다! 쉘이 안전하게 사용할 수 있도록 따옴표를 인용해야하는 경우 다음 printf과 같이 %q수정 자 와 함께 사용하십시오 .

printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""

실제로 이것은 매우 드물게 사용되지만 사용자가 일반적으로하는 것처럼 상위 수준의 물건에 대한 더 나은 전략이 항상 있습니다. 이것은 quote우리가 알고 싶지 않은 모호한 것들에 의해 내부적으로 사용됩니다. 이 quote기능은 공급 업체 / 배포 별 (데비안 전용)이며 아마도 이식성이 없으며 향후 릴리스에서 변경 될 수도 있습니다.

편집하다. 방금 Ubuntu 12.04 시스템을 확인했으며 quote함수는에 /etc/bash_completion의해 정의되고 /etc/bash.bashrc자체적으로에 의해 제공됩니다 /etc/profile.

이것을 어떻게 결정 했습니까? 약간의 휴리스틱 사용 :

  • 있는지 확인 quote에 나타납니다 /etc/profile:

    grep '\bquote\b' /etc/profile

    아니요. 다음 단계로 가십시오.

  • 무엇에 의해 소스 파일이 /etc/profile있습니까?

    grep '[[:space:]]\.[[:space:]]' /etc/profile

    나는 $i(이 소스에 대해 소스를 조사해야하지만,이 경우 파일 /etc/profile.d/*.sh이 있고 읽을 수있는 경우) 파일 /etc/bash.bashrc입니다 /etc/bash.bashrc.

  • 인가 quote/etc/bash.bashrc? 예 / 아니요 등

답변

quote 함수입니다 :

quote ()
{
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

이 함수는 bash 초기화 파일 어딘가에 정의되어 있습니다. 보다 정확하게는 Ubuntu 13.04를 사용하는 경우 /usr/share/bash-completion/bash_completion142 행에서 찾을 수 있습니다 .

다음 명령을 사용하여 확인하십시오.

type quote

그 목적은 분명하다.