Diferença entre set variable “value” e set variable value?

0

Qual é a diferença entre os dois exemplos a seguir em um script de shell:

set variable1             "value"

set variable2              value
    
por user3914897 15.06.2016 / 14:12

1 resposta

0

Em um script de shell, value e "value" e 'value' são todos equivalentes. Você pode optar por usar citações ou não. A razão pela qual aspas existem é que, às vezes, você quer colocar um caractere com um significado especial em uma string e, em seguida, as aspas permitem que o shell saiba que o caractere especial faz parte da string. Por exemplo:

var=value more
var='value more'
var="value more"
var=value\ more

A primeira linha atribui o valor value (uma string de 5 caracteres) à variável cujo nome é var ; more é uma palavra separada desse comando, pois há um espaço antes dele e o efeito do espaço é que o comando executa o programa more com a variável de ambiente var definida como value . As outras três linhas têm o mesmo significado: elas apenas configuram a variável var para o valor value more (uma string de 10 caracteres, em que o 6º caractere é uma string). Aspas simples '…' e "…" envolvem uma string. A terceira possibilidade de citar é a barra invertida, que cita apenas o próximo caractere.

A diferença entre aspas simples e aspas duplas é aquela entre aspas simples, cada caractere significa si mesmo, mas entre aspas duplas, alguns caracteres ainda são interpretados. Em particular, "\" é uma string contendo uma única barra invertida, porque a folga na string é interpretada como a citação do caractere seguinte, e da mesma forma "\"" é uma string contendo apenas aspas duplas; "\$var" é uma cadeia de 4 caracteres que começa com um cifrão, enquanto "$var" é uma cadeia que é o valor da variável var . Em contraste, '$var' é uma cadeia de 4 caracteres que começa com um sinal de dólar e '\$var' é uma cadeia de 5 caracteres que começa com uma barra invertida.

Há mais sutilezas para fazer citações, e não vou entrar nelas aqui; leia um livro ou um manual (por exemplo, o manual do bash ) para detalhes, e talvez pesquise a tag neste site.

Observe que o comando set não atribui um valor a uma variável. set variable value não atribui um valor à variável variable , a sintaxe para isso seria variable=value . O que o comando set faz é substituir os parâmetros do script (ou função). Quando você executa um script com argumentos, eles estão disponíveis no script em variáveis especiais que possuem um número em vez de um nome: $1 , $2 ,…. Essas variáveis são chamadas de parâmetros posicionais (parâmetros porque são os parâmetros do script / função, posicionais porque são acessados por sua posição na lista de parâmetros). Você não pode atribuir a essas variáveis usando o número ( 1=foo ), mas você pode definir todos os parâmetros posicionais executando set com parâmetros. Por exemplo:

#!/bin/sh
echo "$1"
set hello world
echo "$1"

Este script imprime o primeiro argumento que foi passado em sua linha de comando e, em seguida, imprime hello . O set builtin tem outros trabalhos, consulte o manual para mais detalhes.

Para programação básica de shell, você pode esquecer este uso de set por enquanto. As noções básicas de cotação são importantes. Uma coisa que você precisa saber é sempre usar aspas duplas em torno de expansões variáveis, isto é, "$foo" e não simples $foo , porque simples $foo manipula o valor .

Tudo que escrevi nesta resposta é sobre shells ao estilo Bourne / POSIX: sh , dash , bash , ksh , zsh, etc. Existem outras famílias de shell menos comuns com sintaxe diferente. Em (t) csh, set está envolvido em algumas atribuições, mas um sinal de igual ainda está envolvido; citando com \'" é um pouco semelhante mas não idêntico. Em peixes, set variable value define a variável variable como o valor value ; lá também citando com \'" é um pouco semelhante, mas não idêntico.

    
por 16.06.2016 / 14:05