Вопрос:

Как исправить следующую ошибку в Ubuntu 18.04?

shell ubuntu substitution

15 просмотра

1 ответ

1 Репутация автора

У меня есть один файл сценария bash, который хорошо работает в Ubuntu 16.04, но он не работает с тех пор, как я обновился до Ubuntu 18.10.

#!/bin/bash

a="1"
name="a"
value=${!name}
echo "value=" $value   # "value=1"

name="some string"
value=${!name}         # bad substitution error

В Ubuntu 16.04 значение = $ {! Name} не возникает «ошибка неправильной подстановки» и присваивает «значение» пустое значение. Но в Ubuntu 18.04 он говорит «ошибка подстановки» и перестает работать. Я хочу, чтобы он работал как в Ubuntu 16.04.

Автор: 王丽婷 Источник Размещён: 11.08.2019 08:01

Ответы (1)


0 плюса

19255 Репутация автора

Я повторил проблему с rextester с помощью bash 4.3.46 и tutorialspoint с bash 4.4.12.

Я вижу три варианта:

  1. Понизьте вашу версию Bash. Это похоже на ошибку в старой версии bash, которая была исправлена.
  2. Игнорировать и перенаправить сообщение об ошибке на ноль.

value="";                              # first assign empty value
{ value=${!name}; } 2>/dev/null ||:    # this doesn't do anything if !name is invalid
  1. Вы можете написать один, если. И написать правильный код и никогда не разыменовывать переменную с недопустимым именем переменной в нем.

isValidVarName() {
    echo "$1" | grep -q '^[_[:alpha:]][_[:alpha:][:digit:]]*$' && return || return 1
}
if isValidVarName "$name"; then
    value=${!name}
else
    value=""
fi
Автор: Kamil Cuk Размещён: 11.08.2019 08:57
Вопросы из категории :
32x32