Это называется непрямым расширением в bash.
Синтаксис для получения значения переменной, имя которой определяется другой переменной namevar
::
${!namevar}
Поскольку имя вашей переменной состоит из переменной и постоянной строки, вам потребуется один промежуточный шаг:
array=("A" "B" "C")
A_variable=1
B_variable=2
for letter in "${array[@]}"
do
varname="${letter}_variable"
if [ "${!varname}" -eq 1 ]; then
...
Обратите внимание,:если переменная, на которую косвенно -ссылаются, на самом деле не существует, расширение приведет к нулевой строке, что по-прежнему вызовет ошибку. Если это нежелательно, добавьте второй тест, подобный этому первому:
varname="${letter}_variable"
if [ "${!varname}" = "" ]; then
echo "Error: $varname is non-existent or empty"
elif [ "${!varname}" -eq 1 ]; then
...
Кроме того, использование двойных кавычек для защиты от неожиданных символов в результате раскрытия было бы хорошей идеей, если содержимое всех возможных совпадающих переменных не инициализировано безопасными значениями заранее.
Согласно комментарию @Artem S. Tashkinov, апплет XFCE Whisker Menu представляет собой альтернативное меню, которое можно установить с помощью sudo apt install xfce4-whiskermenu-plugin
и добавить на панель. Затем он дает меню на левом рисунке.
Оно содержит практически те же элементы, что и Меню приложений , но показывает маленькую иконку (, обведенную красным ), которая ведет к меню на правом рисунке с доступом к отсутствующим настройки.
Помимо решения проблемы, Я до сих пор удивляюсь: