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 - он хорошо выявляет распространенные ошибки сценариев и может указывать на них, прежде чем они станут вредными привычками.