Я попробовал следующий небольшой простой скрипт:
#!/bin/bash
$1="bar"
echo $1
Но когда я запускаю, ./script foo
я получаю ошибку, и значение не изменяется:
/home/mika/script: line 2: foo=bar: command not found
foo
Я знаю, что $ 1 - это первый аргумент, который вы передаете своему сценарию. Но даже так я хочу изменить его стоимость.
command-line
bash
user258266
источник
источник
Ответы:
Вы можете использовать встроенный
set
:Источник и больше о: Изменение аргумента командной строки - bash .
источник
Вы не можете изменить эти переменные напрямую. Ты мог бы сказать:
Тогда вы можете использовать
$x
вместоИспользование
$1=bar
сразу заменит первый параметр$1
, и вы, по сути, заявляете"foo=bar"
, что это интерпретируется как команда "foo", а не как переменная "foo";источник
Не используйте use
$1
для this, inbash
и других оболочек,$1
это первый аргумент, который вы передаете своему сценарию:Если вы запустите выше, как
foo.sh hello
, он будет печатать,hello
так как это первый аргумент. Кроме того, вы ссылаетесь на переменную какvar
и на содержимое переменной как$var
. Итак, чтобы получить ожидаемое поведение, просто используйте другое имя для вашей переменной и не используйте$
:источник
$1
для значений, которые вы хотите изменить. В любом случае, пока вы исправляете синтаксическую ошибку, она должна работать, ваша главная проблема заключалась в том, что вы использовали$
.$foo="bar"
, которая не работает, вам нужноfoo="bar"
без$
.