bash-скрипт, если переменная равна

Вам нужна поддержка MTP (Media Transfert Protocol ).

Вы можете установить инструмент под названием simple -mtpfs для подключения хранилища вашего устройства.

dnf install simple-mtpfs

Тогда вы сможете установить его вот так:

simple-mtpfs /dev/device /media/yourphone
2
20.09.2019, 15:39
3 ответа

Вы сравниваете строку ("A _переменная" )с целым числом ("1" ).

Вы можете обойти эту проблему с помощью declare -n. Изhelp declare:

-n make NAME a reference to the variable named by its value

Нам нужно [[.. ]], чтобы избежать ошибки, которую вызывает неустановленная «переменная C _».

#!/bin/bash
array=("A" "B" "C")

A_variable=1
B_variable=2
for letter in "${array[@]}"
do
  declare -n foo="${letter}_variable"
  if [[ "$foo" -eq 1 ]]; then
    echo "Ding"
  fi
done

Бонус :можно declare -i A_variable=1сделать целым.

-i to make NAMEs have the `integer' attribute

1
27.01.2020, 21:53

Оператор -eqпредназначен для математических выражений, но вы сравниваете строки.

Чтобы сравнить строки, используйте =.

0
27.01.2020, 21:53

Это называется непрямым расширением в 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
   ...

Кроме того, использование двойных кавычек для защиты от неожиданных символов в результате раскрытия было бы хорошей идеей, если содержимое всех возможных совпадающих переменных не инициализировано безопасными значениями заранее.

5
27.01.2020, 21:53

Теги

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