Linux bash如何从字符串中减去字符
我一直在尝试使用一个字符串,在bash中以一种奇特的渐变效果在同一行上分别输出每个字符,尽管在下标部分的某些操作不太正确:Linux bash如何从字符串中减去字符,linux,bash,macos,gnu,Linux,Bash,Macos,Gnu,我一直在尝试使用一个字符串,在bash中以一种奇特的渐变效果在同一行上分别输出每个字符,尽管在下标部分的某些操作不太正确: str="foobar" n=0 ; for i in {16..21} {21..16} ; do echo -ne "\033[48;5;${i}m ${str:str[i-n]:n++} \033[0m" ; sleep 1; done 它输出: f fo foo foob fooba foobar foobar foobar fo
str="foobar"
n=0 ; for i in {16..21} {21..16} ; do
echo -ne "\033[48;5;${i}m ${str:str[i-n]:n++} \033[0m" ;
sleep 1;
done
它输出:
f fo foo foob fooba foobar foobar foobar foobar foobar foobar
但我希望得到:
f o o b a r
因此,可能是我的方法不正常,或者我遗漏了一些明显的东西?您需要始终获得长度为1且索引n递增的子字符串:
您需要始终获得长度为1且索引为n的递增子字符串: 在表达式${str:str[i-n]:n++}中, str[i-n]的数值实际上是0。 循环步骤中的部分计算值如下所示: ${str:0:1} ${str:0:2} ${str:0:3} ${str:0:4} ... 等等 第二个:inside${var:start:count}后面的值是从开始位置开始计数的字符数。因为起始位置从未改变,所以得到f、fo、foo、foob等等 如果要获得f、o、o、b、a、r,则需要使用以下表达式前进起始位置,并将计数保持为1:
${str:n++:1}
在表达式${str:str[i-n]:n++}中,
str[i-n]的数值实际上是0。
循环步骤中的部分计算值如下所示:
${str:0:1}
${str:0:2}
${str:0:3}
${str:0:4}
... 等等
第二个:inside${var:start:count}后面的值是从开始位置开始计数的字符数。因为起始位置从未改变,所以得到f、fo、foo、foob等等
如果要获得f、o、o、b、a、r,则需要使用以下表达式前进起始位置,并将计数保持为1:
${str:n++:1}