텍스트에서 줄 바꿈을 제거하는 것에 대한 이 질문 에서 다음과 같이 이것을 zsh 별칭으로 바꾸고 싶습니다.
alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
awk 스크립트 내에서 따옴표를 이스케이프하려고 시도했지만이 오류가 발생합니다.
awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted
(파일 이름은 bspsrobustness
)
내가 원하는 것을 할 수있는 방법이 있습니까? 나는 이것을 zsh 별칭 대신 awk 스크립트로 바꿀 수 있다고 생각합니다. 이것이 최선의 선택입니까?
답변
별명 대신 zsh 함수를 사용할 수 있습니다. 인용 할 hoops가 없습니다.
striplines() {
awk '... awk body "with quotes" ...' "$@"
}
답변
진행 상황에 대한 아이디어를 얻으려면 다음을 실행하십시오.
% alias striplines='print -lr awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"'
% striplines
awk
/^$/ {print "\n"; } /./ {printf( " %s ",zsh);}
$
문자는 큰 따옴표로 묶여 있기 때문에 (별명이 확장 된 후 확장 될 때), 쉘에 의해 해석됩니다. 따옴표를 올바르게 사용하려면 전체 별칭 정의를 작은 따옴표로 묶는 것이 더 쉽습니다. 작은 따옴표 안에있는 것은 별명이 사용될 때 확장되는 것입니다. 의 인수는 awk
큰 따옴표로 묶었으므로 전에 백 슬래시가 필요하다는 것이 분명합니다 \"$
.
alias striplines='print -lr awk " /^\$/ {print \"\n\"; } /./ {printf( \" %s \",\$0);}"'
작은 따옴표로 묶은 문자열을 작은 따옴표로 묶는 유용한 관용구는 작은 따옴표로 묶은 문자열 '\''
에 리터럴 작은 따옴표를 넣는 방법과 거의 같습니다. 기술적으로 작은 따옴표로 묶인 문자열, 백 슬래시 따옴표 '
및 다른 작은 따옴표로 묶은 문자열이 병렬로 있습니다. ''
끝에 있는 빈 줄 을 제거 할 수 있습니다.
alias striplines='print -lr awk '\'' /^$/ {print "\n"; } /./ {printf( " %s ",$0);}'\'
이 긴 설명 후 권장 사항 : 별칭이 너무 복잡 하면 function을 사용하십시오 .