Wie kann ich einem Befehl, der sowohl Apostrophe als auch Anführungszeichen enthält, einen Alias ​​zuweisen?

Wie kann ich einem Befehl, der sowohl Apostrophe als auch Anführungszeichen enthält, einen Alias ​​zuweisen?

Aufgrund meiner vorherigen Frage habe ich beschlossen,

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

Ich kann nicht herausfinden, wie ich in meinem Beispiel '?s' ersetzen kann, damit es funktioniert. Habe es bereits durch Fragezeichen und Apostrophe versucht. Für alle Ideen bin ich dankbar. Danke

Antwort1

Machen Sie eine Shell-Funktion daraus, damit Sie die äußeren Anführungszeichen weglassen können.

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

Dies sollte vimmit den Argumenten -c, normal "+p1Gdddd", -c, , :%s/\n/, -c, normal"gVGgJy", aufgerufen werden -cq!. Das "$@"wird auf die Parameter erweitert, die Sie der Funktion gegeben haben, also groe foo.txtsollte es funktionieren.

Antwort2

"Innerhalb" von einfachen Anführungszeichen können Sie ein einfaches Anführungszeichen haben, indem Sie das äußere einfache Anführungszeichen schließen, dann ein maskiertes einfaches Anführungszeichen hinzufügen und die äußeren einfachen Anführungszeichen wieder öffnen, wie

echo 'It'\''s ugly.'

Mit anderen Worten: Alles 'wird zu '\''plus äußeren einfachen Anführungszeichen.

Ihr Alias ​​würde folgendermaßen aussehen:

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

Oder Sie könnten Escape-Zeichen im C-Stil verwenden $'...', bei denen Sie einfache Anführungszeichen nur einmal escapen müssen, aber auch Zeichen in escapen \n:

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

Antwort3

Unter MacOS habe ich festgestellt, dass ich durch Einfügen der folgenden Zeile .bash_profileeinen Alias ​​erhielt, der meinen nützlichen Alias ​​erst bei der späteren Verwendung des logrBefehls einrichtete:

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

""Ich habe den gesamten logrAlias, der für alle neuen Shells erstellt wird, in Anführungszeichen gesetzt , aber der rAlias ​​wird erst verfügbar, wenn ich den logrBefehl ausgebe.

verwandte Informationen