多次打印字符串

多次打印字符串

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").在末尾添加一个。

您还可以使用trsed来格式化输出:

 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].

相关内容