Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash如何从字符串中减去字符_Linux_Bash_Macos_Gnu - Fatal编程技术网

Linux 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

我一直在尝试使用一个字符串,在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  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}