变量处理
从所有变量中搜索匹配的变量; 可以进一步求值; 比如我想输出所有类似规则定义的变量名以及他们的值;
介绍
${!prefix*}
${!prefix@}
prefix是以xxx
开始的, 不支持正则, 正则匹配可以通过其他方式获取
*
:将匹配的变量名通过$IFS
记录的字符串的第一个字符, 将所有的变量进行拼接;@
:则是上面的加个双引号""
即去掉\n
;
# *
prefix_match_set=[]
for i in var_sets:
if i.startswith(prefix):
prefix_match_set.append(i)
result=IFS[0].join(prefix_match_set)
# @
result.replace("\n"," ")
案例
IFS=$'\n'
PASALADI="good morning"
cat <<EOF
${!PA*}
EOF
cat <<EOF
${!PA@}
EOF
# PASALADI
# PATH
# PASALADI PATH
指定IFS
为\n
, 即按照\n
拼接; *
原样输出换行, @
则是一行输出;
输出匹配
DEMO_ARG_VAR1=hello
DEMO_ARG_VAR2=world
for DEMO in ${!DEMO_ARG@}; do
echo $(eval echo $'$'$(echo ${DEMO}))
done
# hello
# world