我有一个字符串如下:
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
进行转换,因为我正在制作的系统中没有这种转换。
答案 0 :(得分:1)
<<<"$foo"
主要是bash-ism。某些/更新的ksh支持它。 (google'ksh here string')。
您的阅读尝试在:
分割,而您的输入中没有
如果你第一次摆脱字符,你可以分成空白(作为ususal) 并将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<"