Domanda

Sto cercando di eseguire i seguenti comandi:

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

E sarebbe bello se potessi solo alias a qualcosa di breve e semplice come "a", "b", "c", "d", ecc ...

Tuttavia, alcuni di questi argomenti hanno un preventivo, che è in disordine l'alias. Qualcuno sa come fuggire in realtà le virgolette? Ho provato cose come '\ "' e \", ma nulla sembra funzionare.

sto usando tcsh come il mio guscio.

È stato utile?

Soluzione

Lo ho convinto per funzionare memorizzando la stringa con il doppio apice in una variabile con la stringa circondato da virgolette singole. Quando uso la variabile I dentro apici.
Esempio:

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

Ho provato questo con tcsh su OSX

Altri suggerimenti

Di seguito tutti i lavori in tcsh per realizzare vari risultati:

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

Per vedere come questi vengono interpretati dalla shell, eseguire alias senza argomenti:

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

Tutto ciò tra parentesi viene eseguito in una subshell. Questo sarebbe male se si sta cercando di impostare le variabili d'ambiente, ma soprattutto irrilevante altrimenti.

Infine, ecco cosa gli esempi effettivamente fare:

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

tcsh ha un backslash_quote più recente variabile. Non so quando è stato aggiunto, ma è supportato in 6.18.01 (versione su OS X El Capitan) e 6.19 (ultima versione stabile al momento della scrittura). In questo modo è possibile sfuggire ', ", e ` all'interno delle virgolette.

set backslash_quote

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

Se non si desidera utilizzare questa opzione, le scelte sono limitate a utilizzare un diverso tipo di citazione intorno al simbolo

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

o non utilizzo di citazioni a tutti e liberalmente backslashing cose.

The\ man\ said\ \"hello\"

Se non è possibile ottenere un alias al lavoro, basta scrivere un breve script di shell, chmod + x, e metterlo da qualche parte nel $ PATH (come $ HOME / bin):

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

Non ho alcuna esperienza con tcsh, ma con bash lo fate come uno di questi:

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

Forse qualcosa di simile funzionerà in tcsh?

Sembra che la ragione che \" e \' non funzionano come ci si aspetta è che csh tradizionalmente non supportava tale sintassi, quindi, se tcsh dovesse sostenere incondizionatamente, allora tali script più anziani potrebbero non funzionare più correttamente .

Come già detto in un'altra risposta, tcsh stessa ha set backslash_quote funzione; tuttavia, a differenza implicita nella risposta citata, questo non è certo una novità, è solo uno specifico-tcsh, ed è stato effettivamente aggiunto al tcsh almeno circa 27 anni fa - la funzione è stato documentato nella pagina di manuale in tcsh.man,v 3.8 1991/07/25 04:50:55 , che difficilmente si qualifica come "nuovo".

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top