numvar
我有一个包含数字的变量。
代码
读取存储在 numvar 中的数字,然后创建相同数量的 sTrapValue[这里的数字随着每次打印从 0 逐渐增加到 numvar]
输入
回显$numvar 5
我要创建$numvar
打印的时间sTrapValue[x]
,其中x
是一个递增的数字。
输出
进入另一个变量 bl
回显 $bl 陷阱值[0]、陷阱值[1]、陷阱值[2]、陷阱值[3]、陷阱值[4]、陷阱值[5]。
它们都有逗号,只有最后一个 sTrapValue[] 以 .(句号)结尾
有任何命令可以执行此 Grep/sed/awk 吗?
答案1
你可以使用这个:
$ numvar=5
$ bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done) \
bl="${bl//$'\n'/,}" && bl="$(sed 's/$/./' <<<"$bl")"
它分为三个部分:
seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done
将生成一个以换行符分隔的输出,显示条目sTrapValue[0-5]
。"${bl//$'\n'/,}"
将会把所有换行符转换为逗号。$(sed 's/$/./' <<<"$bl")
将.
在末尾添加一个。
您还可以使用tr
和sed
来格式化输出:
bl="$(seq 0 "$numvar" | while read i; do echo "sTrapValue[$i]"; done | tr '\n' ',' | sed 's/,$/./')"
测试 :
$ echo "$bl"
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].
答案2
sTrapValue[0]='a';
sTrapValue[1]='b';
sTrapValue[2]='c';
numvar=2;
COUNTER=0;
BL="";
while [ ! $COUNTER -gt ${numvar} ]; do
BL=${BL}${sTrapValue[$COUNTER]},;
let COUNTER=COUNTER+1;
done;
BL=$(echo ${BL} | sed 's/,$/./');
echo $BL;
=> a,b,c。
编辑 :
回答已编辑的问题:
numvar=2;
COUNTER=0;
BL="";
while [ ! $COUNTER -gt ${numvar} ]; do
BL=${BL}sTrapValue[${COUNTER}],;
let COUNTER=COUNTER+1;
done;
BL=$(echo ${BL} | sed 's/,$/./');
echo $BL;
=> sTrapValue[0],sTrapValue[1],sTrapValue[2]。
答案3
如果我正确理解了你的问题,你正在寻找类似的东西:
$ printf 'sTrapValue[%s],' $(seq 0 $numvar) | sed 's/,$/.\n/'
sTrapValue[0],sTrapValue[1],sTrapValue[2],sTrapValue[3],sTrapValue[4],sTrapValue[5].