微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在POSIX shell脚本中迭代字符串的字符?

符合POSIX的 shell应提供这样的机制来迭代字符串集合:

for x in $(seq 1 5); do
    echo $x
done

但是,如何迭代单词的每个字符?

解决方法

这有点迂回,但我认为这适用于任何符合posix标准的shell.我已经尝试过破折号,但是我没有繁忙的盒子来测试.

var='ab * cd'

tmp="$var"    # The loop will consume the variable,so make a temp copy first
while [ -n "$tmp" ]; do
    rest="${tmp#?}"    # All but the first character of the string
    first="${tmp%"$rest"}"    # Remove $rest,and you're left with the first character
    echo "$first"
    tmp="$rest"
done

输出

a
b

*

c
d

请注意,不需要在赋值右侧的双引号;我更喜欢在所有扩展中使用双引号,而不是试图跟踪它们离开它们的安全位置.另一方面,[-n“$tmp”]中的双引号是绝对必要的,如果字符串包含“*”,则需要first =“${tmp%”$rest“}”中的内部双引号”.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐