[linux] 작은 따옴표와 큰 따옴표가 모두있는 bash alias 명령

원하는 것을 수행하는이 명령이 있지만 .bashrc에서 별칭을 얻을 수 없습니다 (작은 따옴표와 큰 따옴표를 모두 사용합니다).

svn status | awk '$1 =="M"{print $2;}'

난 노력 했어:

alias xx="svn status | awk '$1 ==\"M\"{print $2;}'"

그리고 운이없는 다른 상식적인 조합 .. 나는 bash가 따옴표로 매우 까다 롭다는 것을 알고 있습니다. 그래서 별칭을 지정하는 올바른 방법은 무엇이며 그 이유는 무엇입니까? 감사



답변

올바르게 이스케이프하면됩니다.

alias xxx="svn status | awk '\$1 ==\"M\"{print \$2;}'"


답변

별칭을 사용하지 않고 동일한 작업을 수행하는 작업이 있습니다. .bashrc의 함수에 넣으십시오.

xx() {
    svn status | awk '$1 =="M"{print $2;}'
}

이렇게하면 따옴표를 올바르게 가져 오는 것에 대해 걱정할 필요가 없습니다. 이것은 명령 줄에서와 똑같은 구문을 사용합니다.


답변

Bash 2.04 부터 함수를 사용하거나 @ffledgling이 한 방식을 이스케이프하는 것 외에 세 번째 (더 쉬운) 방법이 있습니다. 문자열 리터럴 구문을 사용 하는 것입니다 ( 여기에 훌륭한 답변이 있습니다 ).

예를 들어이 onliner 의 별칭을 만들려면 다음과 같이됩니다.

alias snap-removedisabled=$'snap list --all | awk \'$5~"disabled"{print $1" --revision "$3}\' | xargs -rn3 snap remove'

따라서 $문자열 앞에을 추가하고 작은 따옴표를 이스케이프하면됩니다.

이것은를 사용 하여# shellcheck disable=SC2139 안전하게 비활성화 할 수 있는 shellcheck 경고 를 가져옵니다 .


답변