我想把所有变量都放在一个变量
中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个变量附加到主变量中?
出于这个特定目的,我不想要一个数组。
答案 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