Primeiro caso:
echo $'$foo'
Qual eco $foo(significando que o primeiro $no meu comando echo é descartado)
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:
echo $"$foo"
Esse eco pwd(que significa que o bash se expande $foo, minha variável, para seu valor)
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 grepresultado), 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.
echo $`$foo`
Este eco $~/scripts(eu esperava que fosse impresso ~/scriptse não $~/scripts)
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.