Escapar comillas dobles con alias tcsh
Pregunta
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 que sería bueno si pudiera simplemente alias a algo corto y simple como "a", "b", "c", "d", etc ...
Sin embargo, algunos de estos argumentos tiene una cita, que está arruinando el alias. ¿Alguien sabe cómo escapar de las comillas dobles en realidad? He intentado cosas como '\ "' y \" pero nada parece funcionar.
Estoy usando tcsh como mi concha.
Solución
Tengo que funcione mediante el almacenamiento de la cuerda con la doble cita en una variable con la cadena entre comillas simples. Cuando utilizo la variable que en el interior de las 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%
I probado esto con tcsh en OSX
Otros consejos
La siguiente todo el trabajo en tcsh
para llevar a cabo diversos 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 estos son interpretados por el shell, alias
ejecutan 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 en paréntesis se ejecuta en un subnivel. Esto sería malo si usted está tratando de establecer variables de entorno, pero sobre todo irrelevante lo contrario.
Finalmente, esto es lo que realmente 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 de backslash_quote
más reciente. No estoy seguro de cuando fue agregado pero se admite en 6.18.01
(versión en OS X El Capitán) y 6.19
(última versión estable en el momento de la escritura). Esto hace que sea posible escapar '
, "
y `
dentro de las comillas.
set backslash_quote
set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""
Si no desea utilizar esta opción, sus opciones se limitan al uso de un tipo diferente de la cita alrededor del símbolo
"The man said "'"'"hello"'"'
o no el uso de citas en absoluto y liberalmente backslashing cosas.
The\ man\ said\ \"hello\"
Si usted no puede conseguir un alias para el trabajo, acaba de escribir un script que, chmod + x, y ponerlo en algún lugar de su $ PATH (como $ HOME / bin):
#!/bin/tcsh
replace -x "must" ...
No tengo ninguna experiencia con tcsh, pero con fiesta que hago como cualquiera de los siguientes:
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 parecido funcionará en tsch?
Parece que la razón de que \"
y \'
no funcionan como se espera es que csh
tradicionalmente no apoya tales sintaxis, por lo que, si eran tcsh
a apoyar incondicionalmente, entonces este tipo de scripts mayores pueden no funcionar correctamente más .
Como se ha mencionado en otra respuesta, tcsh en sí tiene el set backslash_quote
función; Sin embargo, a diferencia implicada en la respuesta mencionada, esto no es una característica nueva, que es sólo un uno-Tcsh específica, y fue realmente añadido a tcsh hace al menos 27 años aproximadamente - la característica fue documentado por primera vez en la página del manual en tcsh.man,v 3.8 1991/07/25 04:50:55
, que difícilmente califica como "nuevo".
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.