Как вы обнаружили, !
не запускает расширение истории внутри одинарных кавычек.
Вы можете использовать printf
со строкой формата, содержащей !
символов в одинарных кавычках. Например:
$ name="boda"
$ printf 'hello! my name is %s! bye!\n' "$name"
hello! my name is boda! bye!
или
$ name="boda"
$ var=$(printf 'hello! my name is %s! bye!\n' "$name")
$ echo "$var"
hello! my name is boda! bye!
Если вы поместите переменную в одну строку -в кавычках, оболочка не расширит эту переменную. Попробуйте:
$ TZ=GMT date --date "${RequestDate}" "+%Y-%m-%d %H:%M:%S"
В оболочке есть разные виды кавычек и разные возможные решения. Другой ответ правильный, значения в одинарных кавычках не расширяются. Но вы хотите, чтобы TZ была частью аргумента, и вы хотите, чтобы аргумент содержал кавычки. Вы можете добиться этого, добавив часть в одинарные кавычки и часть в двойные кавычки без разделителя.
date --date='TZ="GMT" '"${RequestDate}" "+%Y-%m-%d %H:%M:%S"
Вы также можете использовать обратную косую черту
date --date="TZ=\"GMT\" ${RequestDate}" "+%Y-%m-%d %H:%M:%S"