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

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

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

回首忆惘然 2019-11-14 14:41:10
我有一个像这样的变量:words="这是一条狗。"我想打一个for循环的每个字符,一次一个,例如,第一character="这",然后character="是",character="一"等我知道的唯一方法是将每个字符输出到文件中的单独行,然后使用while read line,但这似乎效率很低。如何通过for循环处理字符串中的每个字符?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

随着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
?
呼唤远方

TA贡献1856条经验 获得超11个赞

${#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
  • 3 回答
  • 0 关注
  • 1153 浏览
慕课专栏
更多

添加回答

举报

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