Иногда проще профилировать вещи:
Я создал образец входного файла:
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
field:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
aaaaa:bbbbb:ccccc
сценарий оболочки 'a.sh':
#!/bin/bash
for i in `seq 1 1000`; do
cat test.dat | grep ^field | head -n1 | sed 's/:/ /' | awk '{print $1}' >/dev/null
done
сценарий оболочки 'b.sh':
#!/bin/bash
for i in `seq 1 1000`; do
awk -F':' '/^field/ {print $1; exit}' test.dat >/dev/null
done
Профиль it:
time ./a.sh
real 0m10.253s
user 0m5.526s
sys 0m8.668s
time ./b.sh
real 0m3.274s
user 0m1.288s
sys 0m1.783s
(Это было сделано на моем старом любимом MacBook 2008 года, 2,4 ГГц Intel Core 2 Duo)
Очевидно, ваша версия во много раз быстрее. Однако сейчас время для 1000 призывов. В зависимости от частоты выполнения этого кода оболочки вы можете сэкономить всего несколько миллисекунд.
Команда ssh-agent
сама по себе запускает агент SSH и выводит назначения переменных, необходимые командам SSH для взаимодействия с этим агентом. Так как вам нужно выполнить присвоение переменных, чтобы фактически установить переменные, необходимые для eval
вывода.
Это единственный известный пример правильного использования eval
.