为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Bash中的字符串中的每个字符上执行for循环?

/ 猿问

如何在Bash中的字符串中的每个字符上执行for循环?

回首忆惘然 2019-11-14 14:41:10

我有一个像这样的变量:


words="这是一条狗。"

我想打一个for循环的每个字符,一次一个,例如,第一character="这",然后character="是",character="一"等


我知道的唯一方法是将每个字符输出到文件中的单独行,然后使用while read line,但这似乎效率很低。


如何通过for循环处理字符串中的每个字符?


查看完整描述

3 回答

?
MMTTMM

随着sed上dash的壳LANG=en_US.UTF-8,我得到了以下工作的权利:


$ echo "你好嗎 新年好。全型句號" | sed -e 's/\(.\)/\1\n/g'



$ echo "Hello world" | sed -e 's/\(.\)/\1\n/g'

H

e

l

l

o


w

o

r

l

d

因此,输出可以与 while read ... ; do ... ; done


针对示例文本进行了编辑,将其翻译成英文:


"你好嗎 新年好。全型句號" is zh_TW.UTF-8 encoding for:

"你好嗎"     = How are you[ doing]

" "         = a normal space character

"新年好"     = Happy new year

"。全型空格" = a double-byte-sized full-stop followed by text description


查看完整回答
反对 回复 2019-11-14
?
DIEA

您可以使用C样式的for循环:


foo=string

for (( i=0; i<${#foo}; i++ )); do

  echo "${foo:$i:1}"

done

${#foo}扩展到的长度foo。${foo:$i:1}从$i长度1的位置开始扩展到子字符串。


查看完整回答
反对 回复 2019-11-14
?
呼唤远方

${#var} 返回的长度 var


${var:pos:N}从pos开始返回N个字符


例子:


$ words="abc"

$ echo ${words:0:1}

a

$ echo ${words:1:1}

b

$ echo ${words:2:1}

c

因此很容易迭代。


其他方式:


$ grep -o . <<< "abc"

a

b

c

要么


$ grep -o . <<< "abc" | while read letter;  do echo "my letter is $letter" ; done 


my letter is a

my letter is b

my letter is c


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信