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


11

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

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

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

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

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


Ответы:


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

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

@ user258266 нет. Просто вызовите большой скрипт с новым значением, не используйте $1для значений, которые вы хотите изменить. В любом случае, пока вы исправляете синтаксическую ошибку, она должна работать, ваша главная проблема заключалась в том, что вы использовали $.
тердон

Но мне нужно ... Я не могу объяснить здесь, почему ... Может быть, я отредактирую свой вопрос.
user258266

@ user258266 пожалуйста сделай. Вы пытаетесь установить переменную как $foo="bar", которая не работает, вам нужно foo="bar"без $.
тердон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.