Я хочу сделать date
команду с хорошим форматированием, как это:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Но я хочу сохранить это в переменной, чтобы я мог вызывать из скрипта так:
echo "$(nice_date) [WARNING] etc etc"
Однако это не работает
$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.
$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
Какой правильный способ сделать это, чтобы команда date получила один правильный аргумент?
"%F %T"
если вы используете GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, это работает. В настоящее время я не вижу, как защитить это пространство от второй оболочки.Ответы:
Причина, по которой ваш пример терпит неудачу, заключается в том, как работает разбиение слов в оболочке. При запуске
"$($nice_date)"
оболочка выполняетdate
команду с двумя аргументами"+%Y-%m-%d"
и"%H:%M:%S"
. Это терпит неудачу, потому что строка формата для даты должна быть единственным аргументом.Лучший способ сделать это - использовать функцию вместо сохранения команды в переменной:
Если вы действительно хотите сохранить команду в переменной, вы можете использовать массив:
Для получения более подробной информации о сложных случаях сохранения команды в переменной см. BashFAQ 050 .
источник
date: extra operand ‘’
ошибки с обоими подходами вышеЯ согласен, что функция - лучший путь. В качестве альтернативы просто сохраните формат как переменную, а не как целую команду:
источник
echo
подстановка команд и команд также излишни.Кратчайший ответ
источник
Один простой способ - просто «покинуть» пространство с помощью
источник
Пожалуйста, попробуйте ниже:
Вам необходимо добавить символ «», символ, который находится на клавише тильды на клавиатуре. Символ говорит оболочке сначала выполнить команду, а затем присвоить ее переменной.
источник
Вместо того:
Пытаться:
Также вам не нужна последняя подстановка команд:
источник
Была такая же проблема; пришлось помещать дату в печать awk для обработки spunk. я использовал
тогда
источник