linux - 在 ksh 中拆分字符串

标签 linux string shell split ksh

我得到一个字符串如下:

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/

相关文章:

java - 用于替换字符串中数字的正则表达式

python - 如何在同一字符串python上用不同的输入替换多个字符

c - 在C中将字符串存储在数组中

linux - 进度条 + ETA 与 pv 命令在同一行

linux - 压缩和删除 unix 中的日志

c - 如何像 ps -e 一样显示进程

linux - "echo"sh 和 bash 输出不同的答案

linux - Shell:列出按文件数排序的目录(包括子目录)

linux - 标记两个文件中的差异

c - linux读取系统调用没有得到EOF