Использование команды «source» для получения переменных, выдающих неожиданный вывод - PullRequest
0 голосов
/ 20 мая 2019

Я устанавливаю скрипт, который использует переменные из другого скрипта.

Скрипт 1 содержит переменные

Скрипт 2 создает сценарий 1 и выдает неожиданную ошибку.

Fresh Debian 9 устанавливается через GCP.

1.sh

1="test"
2="test2"
3="test3"

2.sh

source 1.sh
echo $1
echo $2
echo $3

Запуск 2.sh, я ожидал:

test
test2
test3

Но я получил:

1.sh: line 2: 1=test: command not found
1.sh: line 3: 2=test2: command not found
1.sh: line 4: 3=test3: command not found
#empty line#
#empty line#
#empty line#

Эта ссылка сообщает мне, как объявляется переменная bash.

Как мне решить эту проблему?

1 Ответ

2 голосов
/ 20 мая 2019

1, 2 и 3 не являются допустимыми именами переменных.$1 и т. Д. Используются для доступа к аргументам, передаваемым в сценарий, но их нельзя назначить как обычные переменные.Попробуйте использовать что-то вроде var1="test" и т. Д.

Кроме того, я рекомендую добавить строку shebang (например, #!/bin/bash или #!/usr/bin/env bash) в начале 2.sh.Это не имеет значения для 1.sh, так как source в скрипте не обращают внимания на строки shebang.

О, и я забыл еще одну вещь: когда вы используете переменную (или параметр, иличто угодно), вы должны почти всегда ставить вокруг него двойные кавычки (например, использовать echo "$var1" вместо просто echo $var1).Когда вы используете переменную без двойных кавычек, оболочка попытается проанализировать ее так, чтобы это скорее вызвало проблемы, чем помогло.

И, наконец: особенно когда вы начинаете, попробуйте вставитьсценариев в shellcheck.net - он хорошо выявляет распространенные ошибки сценариев и может указывать на них, прежде чем они станут вредными привычками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...