Existe alguma maneira de imprimir valor dentro da variável dentro da aspa simples?

4

Considere que eu configurei a variável site e precisa ser impressa por echo ou printf , mas se eu usar aspas simples para escrever algo e quiser usar a variável, então como?

Exemplo:

$ site=unix.stackexchange.com
$ echo "visit:$site"
visit:unix.stackexchange.com

Mas se eu usar aspas simples:

$ echo 'visit:$site'
visit:$site

Então sabemos que '' é uma cotação strong e não expandirá a variável

Eu tentei algo:

$ echo 'visit:"$site"'
visit:"$site"

mas não consegue. Então, eu estou procurando maneira de imprimir valor dentro da variável ao usar aspas simples .

    
por Pandya 16.06.2015 / 12:14

4 respostas

11

Você não pode expandir variáveis entre aspas simples. Você pode finalizar aspas simples e iniciar aspas duplas:

echo 'visit:"'"$site"'"'

Você também pode inserir aspas duplas entre aspas duplas:

echo "visit:\"$site\""
    
por 16.06.2015 / 12:17
5

Ao lidar com a impressão de conteúdo variável, você deve ficar com printf em vez de echo :

printf 'visit:%s\n' "$site"

produzirá visit: , seguido pelo conteúdo de $site e uma nova linha, independentemente dos caracteres em $site .

    
por 16.06.2015 / 19:46
1

choroba está correta.

Embora se isso fosse algum tipo de enigma, eu responderia com isso:

cat << EOF | sh
> echo 'visit:$site'
> EOF

Como aponta jander, isso está bem aberto para um ataque de injeção. Não foi uma resposta séria, por isso, se alguém estava pensando em usar algo assim, não use com entrada não confiável. Por exemplo, valide a string $site como sendo uma URL válida antes de executar cegamente o conteúdo. Algo como isso poderia ajudar (mas a expressão fornecida não é perfeita porque ainda permite injeção, mas use esse tipo de mecânico para testá-lo).

    
por 16.06.2015 / 14:15
0

Se eu entendi seu pedido corretamente, você pode avaliar a string ecoada. Por exemplo:

# eval echo 'visit:$site'
visit:unix.stackexchange.com
    
por 23.01.2018 / 12:14