Substituição de Comando usando '' [closed]

6

Este é um excerto do manual do bash :

When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, ', or \

Mas os backticks tratam $ e \$ da mesma maneira sugerida pela saída dos seguintes comandos:

Command        Output
echo '$PWD'    $PWD
echo '\$PWD'   \$PWD
    
por Nikhil Jangir 20.12.2016 / 13:33

2 respostas

11

I am new to stackexchange and to Linux also. Thanks in advance.

Bem-vindo a ambos!

Não há backticks no seu exemplo, são aspas simples: '' Backticks tem esta aparência: ''

Além disso, sugiro que você simplesmente não os use (os backticks que são)! É melhor usar esta sintaxe para a substituição de comandos: $(<command>)

Leia por que aqui .

Hacker feliz!

    
por 20.12.2016 / 13:41
3

A maneira que eu vejo é que há falta de comunicação: o que os autores manuais do bash chamam de valor literal não é o que nós, como usuários comuns, entendemos como valor literal. Além disso, há duas coisas em jogo. Primeiro, as backquotes servem para a substituição de comandos e, segundo, o "significado literal da barra invertida". Vamos começar com o último.

Cite o manual do bash, seção QUOTING:

A  non-quoted backslash (\) is the escape character.
It preserves the literal value of the next character that
follows, with the exception of <newline>. 

O que é não óbvio aqui é que os autores estão falando sobre a barra invertida, o texto. Única barra invertida em si significa caractere de escape, mas o que eles estão falando no link que você forneceu é a barra invertida dupla. Dê uma olhada nisso:

bash-4.3$ var='echo \ '
bash-4.3$ echo $var

bash-4.3$ var='echo \ '
bash-4.3$ echo $var

bash-4.3$ var='echo \$ '
bash-4.3$ echo $var
$
bash-4.3$ var='echo \\ '
bash-4.3$ echo $var
\

É difícil pensar nisso, mas pense assim: você tem que escapar primeiro do personagem de escape.

    
por 20.12.2016 / 14:45

Tags