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

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

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

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

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

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

1
задан 31 March 2014 в 06:41

2 ответа

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

x=$1
echo $x

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

Используя $1=bar, вы сразу же замените первый параметр для $1, и вы, по существу, заявляете [ f5], и интерпретируется как команда «foo», а не переменная «foo»;

4
ответ дан 24 May 2018 в 10:14
  • 1
    Хорошая идея, но зависит от того, что именно хочет, чтобы OP выполнил ... +1 от меня. – Radu Rădeanu 31 March 2014 в 00:05

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

#!/bin/bash
echo $1

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

#!/bin/bash
var="bar"
echo $var
2
ответ дан 24 May 2018 в 10:14
  • 1
    Этот небольшой сценарий был просто примером, чтобы люди поняли, чего я хочу. Я знаю, что $ 1 - это первый аргумент, который вы передаете своему сценарию. Но, даже так, я хочу изменить свою ценность. Мне нужно применить это в другом большом скрипте. Спасибо. – user258266 30 March 2014 в 23:40
  • 2
    @ пользователь258266 нет. Просто вызовите большой скрипт с новым значением, не используйте $1 для значений, которые вы хотите изменить. Во всяком случае, до тех пор, пока вы исправляете синтаксическую ошибку, она должна работать, основная проблема заключалась в том, что вы использовали $. – terdon♦ 30 March 2014 в 23:42
  • 3
    Но мне нужно ... Я не могу объяснить, почему ... Возможно, я отредактирую свой вопрос. – user258266 30 March 2014 в 23:43
  • 4
    @ пользователь258266 сделайте пожалуйста. Вы пытаетесь установить переменную как $foo="bar", которая не работает, вам нужно foo="bar" без $. – terdon♦ 30 March 2014 в 23:44

Другие вопросы по тегам:

Похожие вопросы: