Pergunta

Eu estou tentando executar os seguintes 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

E seria bom se eu pudesse somente o alias a curto algo e simples, como "a", "b", "c", "d", etc ...

No entanto, alguns desses argumentos têm uma citação, que é bagunçar o alias. Alguém sabe como realmente escapar as aspas duplas? Eu tentei coisas como '\ "' e \", mas nada parece funcionar.

Eu estou usando tcsh como o meu shell.

Foi útil?

Solução

Eu tenho que trabalhar, armazenando a corda com o aspas duplas em uma variável com a string entre aspas simples. Quando eu usar a variável I dentro aspas simples.
Exemplo:

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

Eu testei isso com tcsh em OSX

Outras dicas

A seguir todo o trabalho em tcsh para realizar vários 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 como estes são interpretados pelo shell, execute alias sem 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'

Qualquer coisa entre parênteses é executado em um subshell. Isso seria ruim se você está tentando variáveis ??de ambiente definidas, mas em grande parte irrelevante contrário.

Finalmente, aqui está o que os exemplos realmente fazer:

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

tcsh tem uma backslash_quote variável mais recente. Não tenho certeza quando ele foi adicionado mas é suportado no 6.18.01 (versão no OS X El Capitan) e 6.19 (última versão estável no momento da escrita). Isso torna possível para escapar ', " e ` dentro de aspas.

set backslash_quote

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

Se você não quiser usar esta opção, suas escolhas são limitadas ao uso de um tipo diferente de citação em torno do símbolo

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

ou não o uso de aspas em tudo e liberalmente backslashing coisas.

The\ man\ said\ \"hello\"

Se você não pode obter um alias para o trabalho, basta escrever um script shell curto, chmod + x, e colocá-lo em algum lugar no seu $ PATH (como $ HOME / bin):

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

Eu não tenho nenhuma experiência com tcsh, mas com o bash você fazê-lo como qualquer um destes:

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

Talvez algo trabalho vontade similar em tcsh?

Parece que a razão que \" e \' não funcionam como você espera é que csh tradicionalmente não apoiar tais sintaxe, por isso, se tcsh foram para apoiá-lo incondicionalmente, então tais scripts mais antigos podem não funcionar corretamente mais .

Como mencionado em outra resposta, tcsh em si tem o set backslash_quote recurso; No entanto, ao contrário implícita na resposta mencionado, este não é um novo recurso, é apenas um específico-tcsh, e foi realmente adicionado a tcsh pelo menos cerca de 27 anos atrás - o recurso foi documentada pela primeira vez na página de manual em tcsh.man,v 3.8 1991/07/25 04:50:55 , que dificilmente o qualifica como "novo".

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top