符合POSIX的外壳程序应提供类似的机制来迭代字符串的集合:
for x in $(seq 1 5); do
echo $x
done
但是,我如何遍历单词的每个字符?
答案 0 :(得分:6)
这有点circuit回,但是我认为这可以在任何posix兼容的shell中使用。我已经在dash
中尝试过了,但是我没有方便进行测试的busybox。
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"}"
中的内部双引号。
答案 1 :(得分:0)
您可以使用fold
命令在每个字符后添加换行符并将结果存储在变量中。然后,您可以遍历其元素。
word="some_word"
word=$(echo "$word" | fold -w 1)
for x in "$word"; do
echo $x
done
它将打印:
s
o
m
e
_
w
o
r
d
答案 2 :(得分:0)
这适用于module: {
rules: [
{ parser: { amd: false } }
]
}
和dash
:
busybox
输出:
echo 'ab * cd' | grep -o .