아포스트로피와 따옴표가 모두 포함된 명령의 별칭을 지정하는 방법은 무엇입니까?

아포스트로피와 따옴표가 모두 포함된 명령의 별칭을 지정하는 방법은 무엇입니까?

이전 질문의 결과로 나는 다음과 같이 결정했습니다.

alias groe= ?vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!'?

내 예제에서 '?s'를 대체하여 작동시키는 방법을 찾을 수 없습니다. 이미 물음표와 아포스트로피를 시도했습니다. 어떤 아이디어라도 감사하겠습니다. 고마워

답변1

쉘 함수로 만들면 외부 따옴표를 잃을 수 있습니다.

groe() {
  vim -c 'normal "+p1Gdddd"' -c ':%s/\n/' -c 'normal"gVGgJy"' -c'q!' "$@"
  }

, , , , , , vim인수를 사용하여 호출해야 합니다 . at 은 함수에 제공한 매개변수로 확장되므로 제대로 작동합니다.-cnormal "+p1Gdddd"-c:%s/\n/-cnormal"gVGgJy"-cq!"$@"groe foo.txt

답변2

"내부" 작은따옴표는 외부 작은따옴표를 닫고 작은따옴표를 가질 수 있으며, 이스케이프된 작은따옴표를 추가하고 외부 작은따옴표를 다시 열 수 있습니다.

echo 'It'\''s ugly.'

즉, 모두 외부 작은따옴표 '가 됩니다 .'\''

귀하의 별칭은 다음과 같습니다.

alias groe='vim -c '\''normal "+p1Gdddd"'\'' -c '\'':%s/\n/'\'' -c '\''normal"gVGgJy"'\'' -c'\''q!'\'''

$'...'또는 작은따옴표를 한 번만 이스케이프해야 하고 다음의 이스케이프 문자도 이스케이프해야 하는 C 스타일 이스케이프를 사용할 수 있습니다 \n.

echo $'It\'s a newline: \\n'
alias groe=$'vim -c \'normal "+p1Gdddd"\' -c \':%s/\\n/\' -c \'normal"gVGgJy"\' -c\'q!\''

답변3

MacOS에서는 my에 다음 줄을 배치하면 .bash_profile나중에 명령을 사용할 때만 유용한 별칭을 설정하는 별칭이 제공된다는 것을 발견했습니다 logr.

alias logr="alias r='java -jar LogUtil.jar -gui'"

모든 새 셸에 대해 생성되는 ""전체 별칭 주위에 큰따옴표를 사용했지만 명령 을 실행한 후에만 별칭을 사용할 수 있습니다 .logrrlogr

관련 정보