Eu tentei o seguinte pequeno script simples:
#!/bin/bash
$1="bar"
echo $1
Mas quando executo ./script foo
, recebo erro e o valor não é alterado:
/home/mika/script: line 2: foo=bar: command not found
foo
Eu sei que $ 1 é o primeiro argumento que você passa para o seu script. Mas mesmo assim eu quero mudar seu valor.
command-line
bash
user258266
fonte
fonte
Respostas:
Você pode usar o builtin
set
:Fonte e muito mais sobre: Altere um argumento da linha de comando - bash .
fonte
Você não pode alterar essas variáveis diretamente. Você poderia dizer:
Então você pode usar
$x
em vezO uso
$1=bar
substituirá imediatamente o primeiro parâmetro$1
, e você está essencialmente declarando"foo=bar"
, e ele é interpretado como um comando "foo", não como uma variável "foo";fonte
Não use use
$1
for this, inbash
, and other shells,$1
é o primeiro argumento que você passa para o seu script:Se você executar o procedimento acima
foo.sh hello
, ele será impresso,hello
pois esse é o 1º argumento. Além disso, você se refere a uma variável comovar
e ao conteúdo de uma variável como$var
. Portanto, para obter o comportamento esperado, use outro nome para sua variável e não use a$
:fonte
$1
para os valores que deseja alterar. De qualquer forma, desde que você corrija o erro de sintaxe, ele deverá funcionar, o principal problema é que você estava usando o$
.$foo="bar"
, isso não funciona, você precisafoo="bar"
sem o$
.