Question

Je suis en train d'exécuter les commandes suivantes:

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

Et ce serait bien si je pouvais alias à quelque chose de court et simple comme "a", "b", "c", "d", etc ...

Cependant, certains de ces arguments ont une citation, qui salit l'alias. Est-ce que quelqu'un sait comment échapper en fait les guillemets doubles? J'ai essayé des choses comme « \" » et \", mais rien ne semble fonctionner.

J'utilise tcsh comme ma coquille.

Était-ce utile?

La solution

Je l'ai à travailler en stockant la chaîne avec la double citation dans une variable avec la chaîne entourée de guillemets simples. Lorsque j'utilise la variable I à l'intérieur des guillemets simples.
Exemple:

[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% 

Je l'ai testé cela avec tcsh sur OSX

Autres conseils

Ce qui suit tous les travaux en tcsh pour accomplir divers résultats:

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 ('\'')

Pour voir comment ceux-ci sont interprétés par le shell, exécutez alias sans argument:

% 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'

Tout entre parenthèses est exécuté dans un sous-shell. Ce serait mauvais si vous essayez de définir des variables d'environnement, mais la plupart du temps hors de propos autrement.

Enfin, voici ce que les exemples font réellement:

% t; u; v; w; x; y; z
hello world
hello world
hello world
;hello; world
"hello world"
hello world
hello world

tcsh a une backslash_quote nouvelle variable. Je ne sais pas quand il a été ajouté, mais il est pris en charge dans 6.18.01 (version OS X sur El Capitan) et 6.19 (dernière version stable au moment de la rédaction). Cela permet d'échapper ', " et ` à l'intérieur des guillemets.

set backslash_quote

set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""

Si vous ne souhaitez pas utiliser cette option, vos choix sont limités à l'utilisation d'un type de citation différente autour du symbole

"The man said "'"'"hello"'"'

ou de ne pas utiliser des citations du tout et des choses backslashing généreusement.

The\ man\ said\ \"hello\"

Si vous ne pouvez pas obtenir un alias de travail, il suffit d'écrire un script shell, chmod + x, et le mettre quelque part dans votre $ PATH (comme $ HOME / bin):

#!/bin/tcsh
replace -x "must" ...

Je n'ai aucune expérience avec tcsh, mais avec bash vous le faites comme l'un de ces:

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

Peut-être quelque chose de similaire fonctionnera dans tcsh?

Il semblerait que la raison pour laquelle \" et \' ne fonctionnent pas comme prévu est que csh traditionnellement ne prennent pas en charge cette syntaxe, donc, si tcsh devaient soutenir sans condition, alors ces anciens scripts ne fonctionnent pas correctement plus .

Comme mentionné dans une autre réponse, Tcsh lui-même a la set backslash_quote fonction; Cependant, à la différence impliquée dans la réponse mentionnée, c'est à peine une nouvelle fonctionnalité, il est juste un spécifique à tcsh, et a été effectivement ajouté à tcsh.man,v 3.8 1991/07/25 04:50:55 , qui peut difficilement être qualifié comme "nouveau".

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.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top