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


85

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

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

난 노력 했어:

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

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

답변:


114

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

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

16
그래서 나는 $ ..를 탈출하지 않았다는 것을 몰랐다!
pragmatic_programmer

7
좋은! 나도 '$'를 피해야한다는 것을 몰랐다!
Shadoninja

1
좋은 대답이지만 실수하는 것이 얼마나 쉬운 지 상기시켜줍니다. 내가 취급하는 경우에는 이미 이스케이프 된 문자가 있었고 엄청난 혼란을 겪었습니다. 아래 EJK의 답변은 나에게 더 유용했습니다. 함수는 아마도 많은 사람들에게 더 깨끗한 옵션 일 것입니다. :)
jerclarke

1
@jeremyclarke 동의하지 않습니다, 탈출은 어렵습니다, 가능하면 피하십시오.
파일링

`는 이스케이프해야합니까?
아론 프랑케

92

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

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

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


12
+1, 그러나 한 가지 문제- function키워드는 POSIX와 불필요하게 호환되지 않습니다. 그냥 놔두세요 :xx() { ...
Charles Duffy 2013

5
난 몰랐어. 감사.
EJK 2013

2
이것은 같은 간단하고 I이지만, 다른 하나는보다 정확하게 .. 질문에 대답
pragmatic_programmer

13
@pragmatic_programmer 공정한 해석입니다. 개인적으로, 나는 문자 그대로 반응하지 않음에도 불구하고이 대답이 더 나은 대답이라고 생각합니다. irc.freenode.org의 별칭에 대한 질문을받는 시간의 50 % 이상 #bash, 대답은 "대신 함수 사용"입니다. ; 별칭은 접두사 확장 외에는 아무것도 할 수 없습니다. 예를 들어 인수를 분기하려는 경우에는 유용하지 않습니다.
Charles Duffy

8
정확한 질문에 대한 문자적인 대답이 훨씬 더 선호되는 경우가 있지만 대부분의 경우 이와 같은 대답은 1) 이해하기 쉬운 방법으로 초기 문제를 해결하고 2) 그들의 속담 도구 벨트에 대한 새로운 도구를 요청하십시오.
TecBrat

3

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 경고 를 가져옵니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.