escaping - Escapando comillas dobles con tcsh alias
quotes (4)
Estoy tratando de ejecutar los siguientes comandos:
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
Y sería bueno si pudiera alias a algo corto y simple como "a", "b", "c", "d", etc ...
Sin embargo, algunos de esos argumentos tienen una cita, que está arruinando el alias. ¿Alguien sabe cómo escapar realmente de las comillas dobles? He intentado cosas como ''/ "'' y /" pero nada parece funcionar.
Estoy usando tcsh como mi caparazón.
Lo hice funcionar almacenando la cadena con la comilla doble en una variable con la cadena rodeada de comillas simples. Cuando uso la variable I dentro de comillas simples.
Ejemplo:
[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%
Probé esto con tcsh en OSX
Si no puede obtener un alias para que funcione, solo escriba un guión corto de shell, chmod + x, y colóquelo en algún lugar de su $ PATH (como $ HOME / bin):
#!/bin/tcsh
replace -x "must" ...
No tengo ninguna experiencia con tcsh, pero con bash lo haces como cualquiera de estos:
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
Tal vez algo similar funcionará en tcsh?
Todos los siguientes funcionan en tcsh
para lograr varios resultados:
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 (''/''')
Para ver cómo el intérprete los interpreta, ejecuta un alias
sin argumentos:
% 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''
Cualquier cosa entre paréntesis se ejecuta en una subshell. Esto sería malo si está tratando de establecer variables de entorno, pero en general es irrelevante.
Finalmente, esto es lo que hacen los ejemplos:
% t; u; v; w; x; y; z hello world hello world hello world ;hello; world "hello world" hello world hello world
tcsh
tiene una variable más reciente backslash_quote
. No estoy seguro de cuándo se agregó pero es compatible con 6.18.01
(versión en OS X El Capitan) y 6.19
(la última versión estable al momento de escribir). Esto hace posible escapar ''
, "
`
dentro de las comillas.
set backslash_quote
set sentence = ''I/'m a little teapot.''
set sentence2 = "The man said /"hello/""
Si no desea usar esta opción, sus opciones están limitadas a usar un tipo diferente de cita alrededor del símbolo
"The man said "''"''"hello"''"''
o no usar comillas en absoluto y liberalmente backslashing cosas.
The/ man/ said/ /"hello/"