Script de shell que não executa um comando retornado de uma função

1

Alguém pode explicar por que isso não funciona? Eu tenho uma função bash que simplesmente retorna o número de segundos em um timestamp de duração.

Função de script de shell

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

Chamando a função

seconds 00:00:02.00 #works

Produz a seguinte saída date +%s -d "1970-01-01 00:00:02.00+0" se eu copiar este texto exato e executá-lo no terminal em que ele funciona.

$(seconds 00:00:02.00) #error

No entanto, isso retorna um erro:

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

Qual é o problema aqui? Ou existe uma maneira melhor de fazer isso?

    
por Ben Winding 01.05.2018 / 05:12

1 resposta

2

Você não precisa usar echo a qualquer momento aqui.

Usando o subshell, você está executando a saída da função seconds , que é geralmente mal aconselhada como pode causar um comportamento inesperado, como você está vendo.

Em vez disso, simplifique sua função para executar o comando date :

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

seconds 00:00:02.00

Saída: 2

    
por 01.05.2018 / 07:15