Existe diferença entre “a = b” e “a = $ b”?

1

Eu encontrei dois scripts Unix no meu livro. Em um deles eles implementaram a=$b (na forma de max = $ a) e na outra a=b (na forma de numero = num).

Pergunta

São a mesma coisa ou há alguma diferença?

OBSERVAÇÃO: Eu sou novo no script Unix, então, por favor, descubra comigo.

    
por Arjunsinh Jadeja 24.11.2014 / 18:26

3 respostas

6
$ a=b
$ printf $a
b
$ b=hello
$ a=$b  
$ printf $b
hello

Basicamente a=b faz uma variável chamada a de qual valor é um literal b . a=$b faz uma variável chamada a com o mesmo valor que uma variável já existente chamada b .

    
por 24.11.2014 / 18:43
3

No caso de, a=$b você está atribuindo o valor da variável b a a . Enquanto no caso de a=b você está atribuindo a o valor da string literal " b "

Por exemplo b=10 , Agora, suponha que você queira atribuir a o mesmo valor que b . Você pode fazer o seguinte:

a=$b

ou

a=10
    
por 24.11.2014 / 18:37
2

Você pode pedir ajuda a bash para responder a essas perguntas usando set -x . Este sinalizador diz ao bash para exibir o comando e seus argumentos expandidos antes de executá-lo:

Primeiro, alguma configuração:

$ a=some-value
$ b=some-other-value
$ set -x

Agora vamos ver como o shell interpreta esses comandos:

$ a=b
+ a=b

O valor da variável a está sendo definido para a string literal "b".

Agora vamos tentar $b :

$ a=$b
+ a=some-other-value

Aqui dizemos ao shell para avaliar $b e inserir o valor de b no comando.

Isso mostra um pouco do valor do shell - ele interpreta variáveis e curingas em vez de fazer com que comandos individuais executem o trabalho. Por exemplo, ls não precisa saber como interpretar "* .txt" porque o shell faz o trabalho antes de ls ser iniciado:

$ ls *.txt
+ ls a.txt b.txt c.txt
a.txt  b.txt  c.txt
    
por 24.11.2014 / 20:45