アポストロフィと引用符の両方を含むコマンドをエイリアスするにはどうすればよいですか?

アポストロフィと引用符の両方を含むコマンドをエイリアスするにはどうすればよいですか?

前回の質問の結果、私は

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

私の例で「?」を置き換える方法がわかりません。疑問符とアポストロフィはすでに試しました。何かアイデアがあれば教えてください。ありがとうございます。

答え1

シェル関数にすると、外側の引用符がなくなります。

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

vimこれは、引数-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 スタイルのエスケープを使用することもできます。$'...'このエスケープでは、単一引用符を 1 回だけエスケープする必要がありますが、次の文字もエスケープする必要があります\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

関連情報