Как изменить значение аргумента в скрипте?

11

Я попробовал следующий небольшой простой скрипт:

#!/bin/bash
$1="bar"
echo $1

Но когда я запускаю, ./script fooя получаю ошибку, и значение не изменяется:

/home/mika/script: line 2: foo=bar: command not found
foo

Я знаю, что $ 1 - это первый аргумент, который вы передаете своему сценарию. Но даже так я хочу изменить его стоимость.

user258266
источник
связанные: stackoverflow.com/questions/4827690/…
Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功

Ответы:

10

Вы можете использовать встроенный set:

#!/bin/bash
set -- "bar"
echo $1

Источник и больше о: Изменение аргумента командной строки - bash .

Раду Рэдяну
источник
Я попробовал это, но это все еще повторяло "foo". Вы получили разные результаты? Обязательно передайте «foo» сценарию.
Марти Фрид
@MartyFried Упс, извините ... Я просто обновляю свой ответ.
Раду Рэдяну
Это работает. :-) Хороший ответ ... Я думаю, я предполагал, что он не хотел этого делать, и я не уверен, почему он это сделал, но ваш ответ на самом деле более правильный, чем мое предложение просто не делать этого. Спасибо за ссылку.
Марти Фрид
4

Вы не можете изменить эти переменные напрямую. Ты мог бы сказать:

x=$1
echo $x

Тогда вы можете использовать $xвместо

Использование $1=barсразу заменит первый параметр $1, и вы, по сути, заявляете "foo=bar", что это интерпретируется как команда "foo", а не как переменная "foo";

Марти Фрид
источник
Хорошая идея, но зависит от того, чего конкретно хочет добиться ОП ... +1 от меня.
Раду Рэдяну
2

Не используйте use $1для this, in bashи других оболочек, $1это первый аргумент, который вы передаете своему сценарию:

#!/bin/bash
echo $1

Если вы запустите выше, как foo.sh hello, он будет печатать, helloтак как это первый аргумент. Кроме того, вы ссылаетесь на переменную как varи на содержимое переменной как $var. Итак, чтобы получить ожидаемое поведение, просто используйте другое имя для вашей переменной и не используйте $:

#!/bin/bash
var="bar"
echo $var
terdon
источник
Этот небольшой сценарий был просто примером, чтобы люди поняли, чего я хочу. Я знаю, что $ 1 - это первый аргумент, который вы передаете своему сценарию. Но даже так я хочу изменить его стоимость. Мне нужно применить это в другом большом сценарии. Спасибо.
user258266
@ user258266 нет. Просто вызовите большой скрипт с новым значением, не используйте $1для значений, которые вы хотите изменить. В любом случае, пока вы исправляете синтаксическую ошибку, она должна работать, ваша главная проблема заключалась в том, что вы использовали $.
тердон
Но мне нужно ... Я не могу объяснить здесь, почему ... Может быть, я отредактирую свой вопрос.
user258266
@ user258266 пожалуйста сделай. Вы пытаетесь установить переменную как $foo="bar", которая не работает, вам нужно foo="bar"без $.
тердон