Сделайте жесткую ссылку на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
Это не устанавливает значение ни для одного из 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
пусто, то нулевой элемент не существует, опять ошибка.