如何使用简单命令将大量变量附加到一个变量

时间:2018-04-18 00:30:28

标签: bash variables awk sed sh

我想把所有变量都放在一个变量

A=('blah')
AA=('blah2')
AAA=('blah3')
AAB=('blah4')
AAC=('blah5')
#^^lets pretend theres 100 more of these ^^
#Variable composition
#after AAA, is AAB then AAC then AAD etc etc, does that 100 times

我希望它们全部放入此MASTER变量

#MASTER=${A}${AA}${AAA} (<-- insert AAB, AAC and 100 more variables here)

我显然不想在此表达式中键入100个变量,因为这可能是一种更简单的方法。另外,我会做更多这些因此我需要它自动化。

我对sed相对较新,awk,有没有办法将这100个变量附加到主变量中?

出于这个特定目的,我不想要一个数组。

5 个答案:

答案 0 :(得分:2)

用我最好的猜测,怎么样:

#!/bin/bash

A=('blah')
AA=('blah2')
AAA=('blah3')
AAB=('blah4')
AAC=('blah5')
# to be continued ..

for varname in A AA A{A..D}{A..Z}; do
    value=${!varname}
    if [ -n "$value" ]; then
        MASTER+=$value
    fi
done

echo $MASTER

产生:

blahblah2blah3blah4blah5...

虽然我不确定这是否是OP想要的。

答案 1 :(得分:2)

您可以使用简单单行,非常简单,但更昂贵:

master=$(set | grep -E '^(A|AA|A[A-D][A-D])=' | sort | cut -f2- -d= | tr -d '\n')
  • set列出了var=name格式
  • 中的所有变量
  • grep过滤掉我们需要的变量
  • sort按正确顺序排列(可能是可选的,因为set提供了排序输出)
  • cut提取值,删除变量名称
  • tr删除换行符

让我们测试一下。

A=1
AA=2
AAA=3
AAB=4
AAC=5
AAD=6
AAAA=99 # just to make sure we don't pick this one up
master=$(set | grep -E '^(A|AA|A[A-D][A-D])=' | sort | cut -f2- -d= | tr -d '\n')
echo "$master"

输出:

123456

答案 2 :(得分:1)

echo {a..z}{a..z}{a..z} | tr ' ' '\n' | head -n 100 | tail -n 3
adt
adu
adv

告诉我们,它将从AAA升级到ADV达到100,或者用于ADY达到103。

echo A{A..D}{A..Z} | sed 's/ /}${/g'
AAA}${AAB}${AAC}${AAD}${AAE}${AAF}${AAG}${AAH}${AAI}${AAJ}${AAK}${AAL}${AAM}${AAN}${AAO}${AAP}${AAQ}${AAR}${AAS}${AAT}${AAU}${AAV}${AAW}${AAX}${AAY}${AAZ}${ABA}${ABB}${ABC}${ABD}${ABE}${ABF}${ABG}${ABH}${ABI}${ABJ}${ABK}${ABL}${ABM}${ABN}${ABO}${ABP}${ABQ}${ABR}${ABS}${ABT}${ABU}${ABV}${ABW}${ABX}${ABY}${ABZ}${ACA}${ACB}${ACC}${ACD}${ACE}${ACF}${ACG}${ACH}${ACI}${ACJ}${ACK}${ACL}${ACM}${ACN}${ACO}${ACP}${ACQ}${ACR}${ACS}${ACT}${ACU}${ACV}${ACW}${ACX}${ACY}${ACZ}${ADA}${ADB}${ADC}${ADD}${ADE}${ADF}${ADG}${ADH}${ADI}${ADJ}${ADK}${ADL}${ADM}${ADN}${ADO}${ADP}${ADQ}${ADR}${ADS}${ADT}${ADU}${ADV}${ADW}${ADX}${ADY}${ADZ

最终的化妆品很容易手工制作。

答案 3 :(得分:1)

使用for loop的单线:

for n in A AA A{A..D}{A..Z}; do str+="${!n}"; done; echo ${str}

<强>输出

blahblah2blah3blah4blah5

答案 4 :(得分:1)

假设输入文件inputfile.txt带有任意变量名称和值:

name="Joe"
last="Doe"
A="blah"
AA="blah2

然后做:

master=$(eval echo $(grep -o "^[^=]\+" inputfile.txt | sed 's/^/\$/;:a;N;$!ba;s/\n/$/g'))

这会将inputfile.txt中所有变量的值连接到master变量中。所以你将拥有:

>echo $master
JoeDoeblahblah2