我将以下代码编写为项目工作的一部分。我需要根据输入字符串中i
(半冒号)的数量打印;
值。但是while
循环没有被执行。它正在返回错误。我尝试了很多替代方案,但无法弄明白。
IN="aa;bb;cc;"
c= echo $IN | tr -dc ';' | wc -c
echo $c
i=1
while [ $i -le $c ];
do
echo $i
i=`expr $i + 1`
done
答案 0 :(得分:1)
你需要改变这个:
c= echo $IN | tr -dc ';' | wc -c
到此:
c=`echo $IN | tr -dc ';' | wc -c`
以便运行echo $IN | tr -dc ';' | wc -c
,并将其输出保存在c
中 - 就像您之后在脚本中已经为i
做的那样:
i=`expr $i + 1`
答案 1 :(得分:0)
如果你可以使用awk
,那就更短更容易了:
echo $IN | awk '{ print length(gensub("[^;]","","g",$0)) }'
答案 2 :(得分:0)
一旦有;
字符串,就不需要循环。 shell可以使用${#variable}
为您计算变量中的字符。
$ IN="aa;bb;cc;"
$ c=$(echo $IN | tr -dc ';')
$ echo ${#c}
3