переменная, выбранная из числа - PullRequest
2 голосов
/ 26 января 2020

У меня много предопределенных переменных в скрипте bash, например

$adr1="address"
$out1="first output"
$adr2="another address"
$out2="second output"

, а число взято из внешнего источника, поэтому, например, если число равно 1, мне бы хотелось, чтобы переменная $ adr была значение от $ adr1 и $ out будет от $ out1. Если число равно 2, $ adr должно быть значением $ adr2, а $ out должно быть значением из $ out2 et c.

Редактировать 27.01.2020: ОК, возможно, я не достаточно ясно, попробуйте еще раз с пример:

#! /bin/bash

adr1="address"
out1="first-output"
adr2="another-address"
out2="second-output"

if [ $1 -eq 1 ]; then
    adr=$adr1
    out=$out1
elif [ $1 -eq 2 ]; then
    adr=$adr2
    out=$out2
fi

echo "adr=$adr, out=$out"

Теперь я запусту скрипт (допустим, он называется test. sh):

./test.sh 1
adr=address, out=first-output

И еще один запуск:

./test.sh 2
adr=another-address, out=second-output

Я хотел бы исключить это утверждение if-elif, потому что позже будут также adr3 и out3 и adr4 и out4 et c.

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Я думаю, что вам нужна следующая конструкция:

#! /bin/bash

adr1="address"
out1="first-output"
adr2="another-address"
out2="second-output"
# and so on...

eval adr='$adr'$1
eval out='$out'$1

echo "adr=$adr, out=$out"
0 голосов
/ 26 января 2020

Вы можете легко сделать как метод значения ключа, это полностью динамично c! создайте файл сценария и сохраните его, в этом случае мое имя файла freeman.sh

#! /bin/bash

for i in $@
do
        case $i in 
           ?*=?*) 
              declare "${i%=*}=${i#*=}" ;;
           *) 
              break

        esac
done
# you can echo your variables like this or use $@ to print all
echo $adr1
echo $out1
echo $adr2
echo $out2

для тестирования нашего сценария мы можем сделать так:

$ bash freeman.sh adr1="address" out1="first-output" adr2="another-address" out2="second-output"

вывод:

address
first-output
another-address
second-output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...