gpt4 book ai didi

linux - 在 ksh 中拆分字符串

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:14 24 4
gpt4 key购买 nike

我得到一个字符串如下:

foo=0j0h0min0s

在不使用日期的情况下在几秒钟内转换它的最佳方法是什么?

我试过这样的东西,听起来不错,但运气不好:

#> IFS=: read -r j h min s <<<"$foo"
#> time_s=$((((j * 24 + h) * 60 + min) * 60 + s))
ksh: syntax error: `<' unexpected

欢迎提出任何想法,我只是不能使用 date -d 进行转换,因为它不存在于我正在使用的系统上。

最佳答案

<<<"$foo"主要是bash-ism。它在某些/较新的 ksh 中受支持。 (谷歌'ksh here string')。

您的阅读正试图在 : split ,您的输入中不存在

如果你先去掉字符,你可以在空白处拆分(像往常一样)并将 here-string 更改为 here-doc

#!/bin/ksh

foo=1j2h3min4s
read -r j h min s << END
"${foo//[a-z]/ }"
END
# or echo "${foo//[a-z]/ }" | read -r j h min s
time_s=$((((j * 24 + h) * 60 + min) * 60 + s))
echo ">$foo< = >${foo//[a-z]/ }< = $j|$h|$min|$s => >$time_s<"

>1j2h3min4s< = >1 2 3 4 < = "1|2|3|4 " => >93784<

# or using array, easy to assign, more typing where used
typeset -a t=( ${foo//[a-z]/ } )
time_s=$(( (( t[0] * 24 + t[1]) * 60 + t[2]) * 60 + t[3] ))
echo ">$foo< = >${foo//[a-z]/ }< = ${t[0]}|${t[1]}|${t[2]}|${t[3]} => >$time_s<"

关于linux - 在 ksh 中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48336804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com