Обычный sh
не имеет массивов. Вы должны справиться без массивов. В вашем случае это просто:
start=$(date +%s)
sleep 5
end=$(date +%s)
echo "start=$start end=$end"
Если вы действительно, действительно хотите, чтобы все было в одной подоболочке, вам нужно сохранить выходные данные в виде простой строки и проанализировать эту строку, чтобы получить отдельные значения. Вы можете думать об этой одной строке как о «массиве», где каждая строка является записью массива. Отдельные строки можно получить с помощью sed
(в котором используются индексы, начинающиеся с 1, а не 0).
times=$(date +%s; sleep 5; date +%s)
echo "start=$(echo "$times" | sed -n 1p) end=$(echo "$times" | sed -n 2p)"
Для хранения отдельных строк в переменных используйте подоболочки:
times=$(date +%s; sleep 5; date +%s)
start=$(echo "$times" | sed -n 1p)
end=$(echo "$times" | sed -n 2p)
echo "start=$start end=$end"
Однакоесли вы просто хотите вычислить, сколько времени занял sleep 5
, вы можете также использовать time sleep 5
, который уже делает это для вас.