Як змінити значення аргументу в сценарії?


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 Ups, вибачте ... Я просто оновлюю свою відповідь.
Radu Rădeanu

Це працює. :-) Гарна відповідь ... Я думаю, я припускав, що він цього не хотів робити, і я не впевнений, чому він це зробив, але ваша відповідь насправді правильніше, ніж моя пропозиція просто не робити цього. Дякуємо за посилання
Марті Фрід

4

Ви не можете змінити ці змінні безпосередньо. Ви можете сказати:

x=$1
echo $x

Тоді ви можете використовувати $xзамість цього

Використання $1=barнегайно замінить перший параметр для $1, і ви по суті заявляєте "foo=bar", і він інтерпретується як команда "foo", а не змінна "foo";


Хороша ідея, але залежать від того, що саме хочуть виконати ОП ... +1 від мене.
Radu Rădeanu

2

Не використовуйте $1для цього, в bashта інших оболонках $1перший аргумент, який ви передаєте своєму сценарію:

#!/bin/bash
echo $1

Якщо запустити вищезгадане як foo.sh hello, воно буде надруковано, helloоскільки це перший аргумент. Крім того, ви посилаєтесь на змінну як varі на вміст змінної як $var. Отже, щоб отримати поведінку, яку ви очікуєте, просто використовуйте інше ім’я для змінної і не використовуйте $:

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

Цей невеликий сценарій був лише прикладом, щоб люди зрозуміли, що я хочу. Я знаю, що 1 долар - це перший аргумент, який ви передаєте своєму сценарію. Але навіть як це я хочу змінити його значення. Мені потрібно застосувати це в іншому великому сценарії. Дякую.
користувач258266

@ user258266 ні. Просто зателефонуйте на великий сценарій з новим значенням, не використовуйте $1для значень, які ви хочете змінити. У будь-якому випадку, доки виправляєте синтаксичну помилку, вона повинна працювати, головна проблема полягає в тому, що ви використовували $.
тердон

Але мені потрібно ... Я не можу пояснити тут чому ... Можливо, я відредагую своє запитання.
користувач258266

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