Estou tendo dificuldades para descobrir algumas nuances entre aspas simples e duplas em um contexto variável
Eu defino:
foo=pwd
então execute estes:
echo $'$foo'
Qual eco $foo
(significando que o primeiro $
no meu comando echo é descartado)
echo $"$foo"
Esse eco pwd
(que significa que o bash se expande $foo
, minha variável, para seu valor)
echo $`$foo`
Finalmente, este eco $~/scripts
(eu esperava que fosse impresso ~/scripts
e não $~/scripts
)
alguém pode me ajudar a descobrir essas diferenças?
command-line
bash
scripts
Ilan
fonte
fonte
Primeiro caso:
O primeiro
$
é executado como um comando. O eco não requer espaços entre argumentos, apenas os leva.Então o echo se
$'$foo'
expande para executar o comando$
(que não é um comando, por isso o ignora) e, em seguida, echo'$foo'
. Qualquer coisa''
é recebida pelo valor nominal - não a expande nem nada. Você pode colocar o que deseja '' e nada acontece.Se você substituir o
$
por$$
, ecoará o ID do processo.Segundo:
Isso porque
""
não impede a expansão.""
é normalmente usado para garantir que haja um valor com o qual comparar.Se você tem uma variável que pode estar vazia (por exemplo, é de um
grep
resultado), então deseja comparar com outro valor / variável, é necessário inserir a primeira variável""
. Isso garante que sempre haja uma comparação para verificar, em vez de apenas uma seção vazia de código (como o bash vê) que gera um erro.Finalmente, número 3. Isso é interessante.
Isso porque (nesse caso) echo está imprimindo o
$
caractere primeiro. Colocar algo nos backticks faz com que o valor da variável seja executado como um comando (a melhor maneira de fazer isso nas versões mais recentes do bash é$(command)
)Então, primeiro ele faz eco e
$
depois se expande`$foo`
para o`pwd`
que é executado e retorna~/Scripts
. Mas nós tivemos a$
impressão mais cedo - então toda a saída é$~/Scripts
.fonte