Ksh 字符串捕获并打印下一个字符。

Ksh 字符串捕获并打印下一个字符。,ksh,Ksh,我尝试了一些选择,但对我的案子不起作用。我的要求是。。 假设我在一个文件中有一个参数,并希望捕获以下详细信息,然后运行shell scriptksh PARAMETR=aname1:7,aname2:5 该参数包含两个由逗号分隔的值,每个值由冒号分隔 因此,我们希望将其作为匹配为aname1的字符串进行处理,然后在不同的变量$v1=aname1和$v2=7中打印。如果字符串搜索为aname2,则$v1=aname2和$v2=5,则同样适用于其他值 先谢谢你 这会满足你的要求 #!/bi

我尝试了一些选择,但对我的案子不起作用。我的要求是。。 假设我在一个文件中有一个参数,并希望捕获以下详细信息,然后运行shell scriptksh

PARAMETR=aname1:7,aname2:5
该参数包含两个由逗号分隔的值,每个值由冒号分隔

因此,我们希望将其作为匹配为aname1的字符串进行处理,然后在不同的变量$v1=aname1和$v2=7中打印。如果字符串搜索为aname2,则$v1=aname2和$v2=5,则同样适用于其他值


先谢谢你

这会满足你的要求

    #!/bin/ksh

    typeset -A valueArray

    PARAMETR=aname1:7,aname2:5

    paramArray=(${PARAMETR//,/ })

    for ((i=0;i<=${#paramArray[@]};i++)); do
            valueArray[${paramArray[$i]%:*}]=${paramArray[$i]#*:}
    done

    for j in ${!valueArray[@]}; do
            print "$j = ${valueArray[$j]}"
    done

希望它能帮助您首先将生产线分成两组,然后再处理每一组

echo "${PARAMETR}" | tr "," "\n" | while IFS=: read -r v1 v2; do
  echo "v1=$v1 and v2=$v2"
  done
结果:

v1=aname1 and v2=7
v1=aname2 and v2=5

谢谢你的建议。这是很有帮助的。对于${paramArray[@]}中的x,类似地,IFS=,读取-A paramArray;do IFS=:read-r name value@chepner,也许吧,但作为一般规则,我从不使用IFS,因为它是shell内部使用的一个特殊变量。我知道它有时很有用,但根据我的经验,它产生的问题比用更复杂的脚本解决的问题要多。但是我的特质。嗯,是的,我完全按照预期使用它。注意,我没有全局更改该值;我只是为了read命令而更改它,以便它执行所需的字段拆分。谢谢您的建议。这也很有帮助。