Chcę wykonać date
polecenie z ładnym formatowaniem, takie jak to:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Ale chcę zapisać to w zmiennej, aby móc wywoływać ze skryptu w następujący sposób:
echo "$(nice_date) [WARNING] etc etc"
Jednak to nie działa
$ 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.
Jak to zrobić, aby komenda date otrzymała jeden poprawny argument?
"%F %T"
jeśli używasz GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, działa. Obecnie nie widzę, jak zabezpieczyć to miejsce przed drugą powłoką.Odpowiedzi:
Przyczyną niepowodzenia twojego przykładu jest sposób podziału słowa powłoki. Po uruchomieniu
"$($nice_date)"
powłoka wykonujedate
polecenie z dwoma argumentami"+%Y-%m-%d"
i"%H:%M:%S"
. Nie udaje się to, ponieważ ciąg formatu dla daty musi być pojedynczym argumentem.Najlepszym sposobem na to jest użycie funkcji zamiast przechowywania polecenia w zmiennej:
Jeśli naprawdę chcesz zapisać polecenie w zmiennej, możesz użyć tablicy:
Aby uzyskać więcej informacji na temat złożonych przypadków przechowywania polecenia w zmiennej, zobacz BashFAQ 050 .
źródło
date: extra operand ‘’
błędy w obu powyższych podejściachZgadzam się, że funkcja jest najlepszą drogą. Alternatywnie po prostu zapisz format jako zmienną, a nie całe polecenie:
źródło
echo
podstawienie polecenia i są również zbędne.Najkrótsza odpowiedź to
źródło
Jednym łatwym sposobem jest po prostu „uciec” przestrzeni za pomocą \
źródło
Wypróbuj poniższe:
Musisz dodać symbol „” znajdujący się na klawiszu tyldy na klawiaturze. Symbol mówi powłoce, aby najpierw wykonać polecenie, a następnie przypisać do zmiennej.
źródło
Zamiast:
Próbować:
Ponadto nie potrzebujesz ostatniego podstawienia polecenia:
źródło
Miał ten sam problem; musiałem umieścić datę na wydruku awk do przetworzenia przez splunk. użyłem
następnie
źródło