Как использовать значение переменной в качестве имени динамической переменной?

Поскольку вы конвертируете в MP3 и используете -b :a в качестве спецификатора выходного потока, я нашел следующее в разделе 8.6 libmp3lame.

The following options are supported by the libmp3lame wrapper. The lame-equivalent of the options are listed in parentheses.

b (-b) Set bitrate expressed in bits/s for CBR or ABR. LAME bitrate is expressed in kilobits/s.

http://ffmpeg.org/ffmpeg-codecs.html#libmp3lame-1

0
23.12.2020, 23:42
2 ответа

Bash предоставляет, как вы показали, утилиту разыменования ("Дайте мне значение переменной, чье имя равно этому" ), что делает это относительно простым. Хотя проверка на недопустимые выборки, возможно, выходит за рамки этого, использование set -uприведет к прерыванию сценария, если будет указана ссылка на несуществующую переменную :

.
$./625908.sh dev
Prefix is 'DEV'.
Site is 'dev.example.com'.
$./625908.sh fake
Prefix is 'FAKE'.
./625908.sh: line 9: !SITEVAR: unbound variable

Итак, глядя на этот скрипт:

#!/bin/bash
set -u
PROD_SITE='prod.example.com'
DEV_SITE='dev.example.com'
PREFIX=${1:-PROD}
PREFIX=${PREFIX^^} # Squash to uppercase
printf "Prefix is '%s'.\n" "${PREFIX}"
SITEVAR="${PREFIX}_SITE"
SITE="${!SITEVAR}"
printf "Site is '%s'.\n" "${SITE}"

Это можно как-то упростить, но не на тонну:

#!/bin/bash
set -u
PROD_SITE='prod.example.com'
DEV_SITE='dev.example.com'
PREFIX=${1:-PROD}
SITEVAR=${PREFIX^^}_SITE
SITE="${!SITEVAR}"
printf "Site is '%s'.\n" "${SITE}"
1
18.03.2021, 22:41

i have a set of variables with _SITE suffix.

Если можешь, не делай этого. Вместо этого используйте ассоциативный массив (, как базовый массив, но индексы, если это возможно, представляют собой строки ). Это печатаетwww.site.com:

declare -A sites=([dev]=dev.site.com [prod]=www.site.com)
site=prod
echo "${sites[$site]}"
2
18.03.2021, 22:41

Теги

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