Как экспортировать переменную в bash, где имя переменной состоит из двух переменных?

Попробуйте это:

awk '_a[$1" "$2]++==0'  < filename
0
24.01.2019, 17:53
2 ответа

Это работает:

#!/bin/bash

for x in 0 1 2 3; do
    export FVAR$x="Is's $x"
done

env | grep FVAR

Выполнение:

$./fvar.sh 
FVAR3=Is's 3
FVAR2=Is's 2
FVAR1=Is's 1
FVAR0=Is's 0
1
28.01.2020, 04:03
export "${!FVAR[$i]}"=...

Это предполагает, что FVARявляется массивом, и пытается использовать его элемент в индексе $iв качестве имени переменной для расширения в этой командной строке. (То есть a=11; b=22; c=33; p=(a b c); echo ${!p[1]}напечатает 22, поскольку p[1]равно b, $bравно 22.)

FVAR[0]и т. д. не содержат имен переменных в этом скрипте, так что подстановка приводит к пустой строке.

Вы должны иметь возможность использовать только

for i in 1 2 3 4 5; do
    export "FVAR$i=$(generate some value from $i)"
done

, так как exportобрабатывает имя переменной после расширения. Однако это не относится к обычному заданию. FVAR$i=$(...)не работает.


Конечно, в зависимости от того, что вы делаете, могут быть и другие способы, например объединение всех значений в одну переменную и ее экспорт.

FVARS="$(generate some value from 1)"
for i in 2 3 4 5 ; do
    FVARS+=":$(generate some value from $i)"
done
export FVARS

Хотя это требует резервирования некоторого символа для использования в качестве разделителя, и организация установки сепаратора в нужном месте и т. д.

0
28.01.2020, 04:03

Теги

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