var=$(echo "asdf")
echo $var
# => asdf
Используя этот метод, команда сразу оценивается и ее возвращаемое значение сохраняется.
stored_date=$(date)
echo $stored_date
# => Thu Jan 15 10:57:16 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 10:57:16 EST 2015
То же самое с обратным ключом
stored_date=`date`
echo $stored_date
# => Thu Jan 15 11:02:19 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 11:02:19 EST 2015
Использование eval в $(...)
он не будет оцениваться позже
stored_date=$(eval "date")
echo $stored_date
# => Thu Jan 15 11:05:30 EST 2015
# (wait a few seconds)
echo $stored_date
# => Thu Jan 15 11:05:30 EST 2015
Используя eval, он оценивается при использовании eval
stored_date="date" # < storing the command itself
echo $(eval "$stored_date")
# => Thu Jan 15 11:07:05 EST 2015
# (wait a few seconds)
echo $(eval "$stored_date")
# => Thu Jan 15 11:07:16 EST 2015
# ^^ Time changed
В приведенном выше примере, если вам нужночтобы запустить команду с аргументами, поместите их в строку, которую вы храните
stored_date="date -u"
# ...
Для сценариев bash это редко актуально, но последнее замечание.Будьте осторожны с eval
.Eval - это только строки, которыми вы управляете, но не строки, полученные от ненадежного пользователя или созданные из ненадежного пользовательского ввода.
- Спасибо @CharlesDuffy за напоминание процитировать команду!