Flucht Anführungszeichen mit tcsh-alias
Frage
Ich versuche, führen Sie die folgenden Befehle:
replace -x "must " A2input.txt
replace -x " a" -f -s ## A2input.txt
replace -x to -s ## -a A2input.txt
replace -x faith -f "unequivocal" A2input.txt
Und es wäre schön, wenn ich nur könnte verwenden Sie einen alias, um so etwas kurz und einfach wie "a", "b", "c", "d", etc...
Jedoch, einige dieser Argumente habe hier ein Zitat, das Durcheinander des Pseudonyms gestattet.Weiß jemand, wie man tatsächlich die Flucht der Anführungszeichen?Ich habe versucht, Dinge wie " \ "" und \", aber nichts scheint zu funktionieren.
Ich bin mit tcsh als meine Schale.
Lösung
Ich habe es funktioniert, indem die Zeichenfolge mit doppelten Anführungszeichen in einer variable, die mit der Zeichenfolge in einfache Anführungszeichen gesetzt.Wenn ich die variable, die ich bis in einfachen Anführungszeichen.
Beispiel:
[11:~] phi% [11:~] phi% set text = 'a quote "' [11:~] phi% alias ec echo '$text' [11:~] phi% ec a quote " [11:~] phi% [11:~] phi% alias ec echo this has '$text' [11:~] phi% ec this has a quote " [11:~] phi%
Getestet habe ich diese mit tcsh auf OSX
Andere Tipps
Die folgenden arbeiten alle in tcsh
zu erreichen verschiedene Ergebnisse:
alias t echo hello world # you may not actually need any quotes alias u 'echo "hello world"' # nested quotes of different types alias v echo\ \"hello\ world\" # escape everything alias w echo '\;'hello'";"' world # quote/escape problem areas only alias x 'echo \"hello world\"' # single quote and escape for literal " alias y "echo "\""hello world"\" # unquote, escaped quote, quote ("\"") alias z 'echo '\''hello world'\' # same goes for single quotes ('\'')
Um zu sehen, wie diese werden von der shell interpretiert, ausgeführt alias
ohne Argumente:
% alias t (echo hello world) u echo "hello world" v echo "hello world" w (echo \;hello";" world) x echo \"hello world\" y echo "hello world" z echo 'hello world'
Alles, was in Klammern gesetzt ist, laufen in einer subshell.Dies wäre schlecht, wenn Sie versuchen, Umgebungsvariablen, aber weitgehend irrelevant, sonst.
Schließlich, hier ist, was die Beispiele, die Sie tatsächlich tun:
% t; u; v; w; x; y; z hello world hello world hello world ;hello; world "hello world" hello world hello world
tcsh
eine neuere variable backslash_quote
.Nicht sicher, wenn es Hinzugefügt wurde, aber es ist unterstützt 6.18.01
(version auf OS X El Capitan) und 6.19
(neueste stabile Version zur Zeit des Schreibens).Dies macht es möglich, zu entkommen '
, "
, und `
innerhalb der Anführungszeichen.
set backslash_quote
set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""
Wenn Sie nicht wollen, um diese option zu verwenden, Ihre Entscheidungen sind begrenzt, um eine andere zitieren, um das symbol
"The man said "'"'"hello"'"'
oder nicht mit Anführungszeichen und liberal backslashing Dinge.
The\ man\ said\ \"hello\"
Wenn Sie nicht bekommen kann einen alias zu arbeiten, schreibt einfach einen kurzen shell-Skript mit chmod +x, und legen Sie Sie irgendwo in Ihrem $PATH (wie $HOME/bin):
#!/bin/tcsh
replace -x "must" ...
Ich habe keine Erfahrung mit tcsh, aber mit bash-Sie tun es wie die folgenden:
alias t='echo "hello world"' # using single quotes to enclose entire string
alias t=echo\ \"hello\ \ world\" # escape " and <space>
alias t="echo \"hello world\"" # double-quote + escape inner double quotes
Vielleicht etwas ähnliches werden in tcsh?
Es scheint, dass der Grund, dass \"
und \'
nicht so funktionieren, wie Sie erwarten, ist, dass csh
traditionell trifft nicht unterstützen, wie syntax, so dass, wenn tcsh
waren bedingungslos unterstützen, dann solche ältere Skripte können nicht mehr richtig funktionieren.
Wie bereits erwähnt in einer anderen Antwort, tcsh selbst hat die set backslash_quote
Funktion;jedoch, im Gegensatz implizit in der Antwort erwähnt, ist dies kaum eine neue Funktion, es ist nur eine tcsh-spezifische, und tatsächlich wurde Hinzugefügt tcsh mindestens einige vor 27 Jahren — das feature wurde erstmals dokumentiert im Handbuch-Seite tcsh.man,v 3.8 1991/07/25 04:50:55
, die kaum qualifiziert es als "neu".
http://mdoc.su/n,f -, d - /tcsh.1
backslash_quote (+) If set, backslashes (`\') always quote `\', `'', and `"'. This may make complex quoting tasks easier, but it can cause syntax errors in csh(1) scripts.