bash - variavel - tornando variáveis de ambiente permanentes




Por que um espaço em uma atribuição de variável gera um erro no Bash? (2)

A razão é, simplesmente, que o shell é construído para se comportar assim. Pode não fazer sentido para alguém com experiência em outras linguagens de programação (se você chamar a sintaxe de shell de uma "linguagem", que em certo sentido é).

O shell scripting torna possível, em muitos casos, simplesmente não citar strings (contanto que uma sequência de caracteres feita com uma única string não contenha nenhum espaçamento ou caracteres especiais). Graças a isso, você pode escrever:

 my_command -n -X arg1 arg2

Em vez de (em algum tipo de pseudo código imaginário)

 "my_command" "-n" "-X" "arg1" "arg2"

Na maioria das linguagens, é ao contrário: strings literais são citadas, o que libera "espaço de sintaxe" para usar variáveis ​​sem qualquer caractere especial (como $ em shell script).

A sintaxe da shell fornece conveniência em casos frequentes, ao custo de, bem, menos conveniência (e legibilidade) ao fazer algumas outras coisas. É tanto uma maldição como uma bênção. O bom é saber que, se você tiver um shell interativo, poderá ter 100% de certeza de que possui um interpretador que lidará com algum tipo de programa (talvez deselegante). Devido à sua disponibilidade universal (apesar de existirem vários sabores), o shell é um tipo de plataforma que é útil o suficiente para valer a pena aprender.

Esta questão já tem uma resposta aqui:

#!/bin/bash

declare -r NUM1=5
NUM2 =4                # Line 4

num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2))  # Line 9

echo "$num3"
echo $((5**2))
echo $((5%4)) 

Estou usando este script bash e, quando eu estava executando o script, recebi o erro

./bash_help 
./bash_help: line 4: NUM2: command not found
./bash_help: line 9: NUM1 / NUM2: division by 0 (error token is "NUM2")
5
25
1

Então eu mudei o código para isso e o erro foi embora.

#!/bin/bash

declare -r NUM1=5
NUM2=4

num3=$((NUM1 + NUM2))
num4=$((NUM1 - NUM2))
num5=$((NUM1 * NUM2))
num6=$((NUM1 / NUM2))

echo "$num3"
echo $((5**2))
echo $((5%4)) 

Por que não podemos usar espaços quando atribuímos um valor a uma variável? É convenção usar espaços para melhor legibilidade do código. Alguém pode explicar isso?


Não é uma convenção no bash (ou, mais genericamente, nos shells da família POSIX).

Quanto ao "porquê", é porque as várias formas de o fazer errado têm significados válidos como comandos. Se você fez NUM2 = 4 uma atribuição, então você não poderia passar = como um argumento literal sem citá-lo. Consequentemente, qualquer alteração desse tipo seria incompatível com versões anteriores , em vez de ser colocada em um espaço indefinido (onde as extensões do padrão POSIX sh precisam ser utilizadas para evitar a constituição de violações desse padrão).

NUM2= 4 # runs "4" as a command, with the environment variable NUM2 set to an empty string
NUM2 =4 # runs "NUM2" as a command, with "=4" as its argument
NUM2 = 4 # runs "NUM2" as a command, with "=" as its first argument, and "4" as another




variable-assignment