Shell 脚本不执行从函数返回的命令

Shell 脚本不执行从函数返回的命令

有人可以解释一下为什么这不起作用吗?我有一个 bash 函数,它只返回持续时间时间戳中的秒数。

Shell脚本函数

seconds() { 
    result=$(echo "\"1970-01-01 $1+0\"")
    echo date +%s -d $result
}

调用函数

seconds 00:00:02.00 #works

date +%s -d "1970-01-01 00:00:02.00+0"如果我复制这个确切的文本并在它工作的终端中执行它,则会产生以下输出。

$(seconds 00:00:02.00) #error

然而这会返回一个错误:

date: extra operand ‘00:00:02.00+0"’

这里有什么问题?或者有更好的方法来做到这一点吗?

答案1

不需要使用echo在这里的任何一点。

使用子 shell,您正在执行函数的输出seconds,即通常是不明智的因为它可能会导致像您所看到的意外行为。

相反,简化您的函数以运行date命令本身:

#!/bin/bash
seconds () {
    date -d "1970-01-01 $1+0" "+%s"
}

seconds 00:00:02.00

输出:2

相关内容