迭代POSIX sh中字符串中的字符

时间:2016-11-22 19:18:42

标签: shell sh

#!/bin/sh

read -p "Enter sequence:  " seq

for char in $seq; do
    echo "$char"
done

我从标准输入中读取“字符”序列。例如,让它为1234(),

我想将其更改为:

'1' '2' '3' '4' '(' ')' ','

我不想回应这个序列。我需要它才能拥有这个新价值。

是否可以在标准sh脚本中使用?

2 个答案:

答案 0 :(得分:1)

您可以使用sed(1):

拆分字符串
seq=`printf "%s\n" "$seq" | sed 's/./ &/g'`

答案 1 :(得分:1)

我感到很惊讶,但这对我的所有贝壳和奇怪的角色都有效(包括例如-())(:除外):

iterate_over_chars()
{
    #reset OPTIND in case this is going to be used multiple times
    #(doable without local (which isn't POSIX) but local is nice and very portable)
    local seq="$1" OPTIND=1 
    while getopts "$seq" opt "-$seq"; do
        echo "$opt"
    done
}
printf '%s\n' Enter sequence 2>/dev/null
read seq #read -p isn't exactly POSIX 
iterate_over_chars "$seq"

我们的想法是在单词前加上-,然后将该单词视为选项组。