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.

¿Fue útil?

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".

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top