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