Случайная ошибка несвязанной переменной в функции

Сделайте жесткую ссылку наrestore.sh:

ln restore.sh link_to_restore.sh

Содержимое файла restore.sh:

#!/bin/bash

if [ "$0" = "./link_to_restore.sh" ]; then
    echo foo
elif [ "$0" = "./restore.sh" ]; then
    echo bar
fi

Тестирование

$./restore.sh 
bar
$./link_to_restore.sh 
foo
0
23.12.2019, 18:01
1 ответ

Это не устанавливает значение ни для одного из value, keyили arg:

.
declare value key arg

Итак, если назначение keyв caseне достигнуто:

while (( $# > 0 )); do
    arg="$1" && shift
    case "$arg" in
        --key=*)
            key="${arg#*=}"
        ;;

, то keyпо-прежнему будет неустановленным ("несвязанным" )после цикла, и, поскольку скрипт имеет set -u, он выдаст ошибку при его использовании.

if [ -z "$key" ]; then # line 66: key: unbound variable

Инициализация переменных пустыми строками (, как и в случае с declare key= value= arg=), устранит эту проблему.

Однако у вас также есть эта ссылка наargs:

if [ -z "$key" ]; then # line 66: key: unbound variable
    if (( ${#args} > 0 )); then

Обратите внимание, что это относится к args, а не к args[@], вы берете длину нулевого элемента массива args, а не количество элементов в нем. Но если argsпусто, то нулевой элемент не существует, опять ошибка.

3
28.01.2020, 02:21

Теги

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