0

我编写了一个函数来从配置文件中读取时间并将其计算为秒。

配置文件中的行如下所示:

timeend=30h

该函数是为 bash 编写的,但在我使用的 Linux 发行版中,没有 bash 可用,只有 sh 和 ash。

在 sh 和 ash 中,似乎我无法使用-1.
我如何需要更改代码以使其在 ash 或 sh 中工作?

getTimeEndFromConfig(){
case $timeend in
*s )
echo ${timeend::-1};;
*m )
zeit=${timeend::-1}
TIMEEND=$(($zeit*60))
echo ${TIMEEND};;
*h )
zeit=${timeend::-1}
TIMEEND=$(($zeit*3600))
echo ${TIMEEND};;
esac
}

更新所以我改变了它,但现在当我调用这个函数时
我总是得到一个。arithmetic syntax error

4

1 回答 1

0

${timeend::-1}是一个 bash 扩展(实际上是一个相对较新的具有负偏移量的扩展)。

POSIX shell 支持以下语法

zeit=${timeend%?}

在这种情况下,?表示任何字符,并且%表示从字符串末尾删除最短出现的模式。

或者,您可以使用 sed:

zeit=$(printf '%s' "$timeend" | sed 's/.$//')

这也会从字符串中删除最后一个字符。

在不支持算术扩展的旧 shell 中,我建议使用 awk:

echo "$(printf '%d' "${timeend%?}" | awk '{print $1 * 3600 }')"

case在这里,我在语句的最后一个分支中结合了子字符串提取和乘法。

于 2015-12-21T09:22:17.500 回答