Вы можете установить инструмент под названием simple -mtpfs для подключения хранилища вашего устройства.
dnf install simple-mtpfs
Тогда вы сможете установить его вот так:
simple-mtpfs /dev/device /media/yourphone
Вы сравниваете строку ("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
Оператор -eq
предназначен для математических выражений, но вы сравниваете строки.
Чтобы сравнить строки, используйте =
.
Это называется непрямым расширением в 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
...
Кроме того, использование двойных кавычек для защиты от неожиданных символов в результате раскрытия было бы хорошей идеей, если содержимое всех возможных совпадающих переменных не инициализировано безопасными значениями заранее.