Eu quero fazer o date
comando com boa formatação como esta:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Mas eu quero salvar isso na variável, para que eu possa chamar do script assim:
echo "$(nice_date) [WARNING] etc etc"
No entanto, não funciona
$ 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.
Qual é a maneira correta de fazer isso, para que o comando date obtenha um argumento correto?
"%F %T"
se você estiver usando o GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, ele funciona. Atualmente, não vejo como proteger esse espaço do segundo shell.Respostas:
A razão pela qual seu exemplo falha é devido à maneira como a divisão de palavras do shell funciona. Quando você executa
"$($nice_date)"
, o shell está executando odate
comando com dois argumentos"+%Y-%m-%d"
e"%H:%M:%S"
. Isso falha porque a cadeia de formato da data deve ser um único argumento.A melhor maneira de fazer isso é usar uma função em vez de armazenar o comando em uma variável:
Se você realmente deseja armazenar o comando em uma variável, pode usar uma matriz:
Para obter mais detalhes sobre os casos complexos de armazenamento de um comando em uma variável, consulte BashFAQ 050 .
fonte
date: extra operand ‘’
erros nas duas abordagens acima #Concordo que uma função é o melhor caminho a percorrer. Como alternativa, basta armazenar o formato como uma variável em vez de todo o comando:
fonte
echo
substituição e o comando também são supérfluos.A resposta mais curta é
fonte
Uma maneira fácil é apenas "escapar" do espaço com um \
fonte
Por favor, tente o abaixo:
Você precisa adicionar o símbolo "" "o símbolo que está na tecla til no teclado. O símbolo diz ao shell para executar o comando primeiro e depois atribuir à variável.
fonte
Ao invés de:
Experimentar:
Além disso, você não precisa da última substituição de comando:
fonte
Teve o mesmo problema; teve que colocar uma data em uma impressão awk para processamento por splunk. eu usei
então
fonte