Saya ingin membuat date
perintah dengan format yang bagus seperti ini:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Tapi saya ingin menyimpan ini dalam variabel, jadi saya bisa menelepon dari skrip seperti ini:
echo "$(nice_date) [WARNING] etc etc"
Namun itu tidak berhasil
$ 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.
Apa cara yang benar untuk melakukan ini, sehingga perintah tanggal untuk mendapatkan satu argumen yang benar?
"%F %T"
jika Anda menggunakan GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, itu berfungsi. Saat ini saya tidak bisa melihat bagaimana cara mendapatkan ruang yang terlindung dari shell kedua.Jawaban:
Alasan contoh Anda gagal adalah karena cara pemecahan kata shell bekerja. Ketika Anda menjalankan
"$($nice_date)"
, shell mengeksekusidate
perintah dengan dua argumen,"+%Y-%m-%d"
dan"%H:%M:%S"
. Ini gagal karena string format untuk tanggal harus berupa argumen tunggal.Cara terbaik untuk melakukan ini adalah dengan menggunakan fungsi alih-alih menyimpan perintah dalam variabel:
Jika Anda benar-benar ingin menyimpan perintah dalam variabel, Anda bisa menggunakan array:
Untuk detail lebih lanjut tentang kasus kompleks menyimpan perintah dalam variabel, lihat BashFAQ 050 .
sumber
date: extra operand ‘’
kesalahan dengan kedua pendekatan di atasSaya setuju fungsi adalah cara terbaik untuk pergi. Sebagai alternatif, cukup simpan format sebagai variabel daripada seluruh perintah:
sumber
echo
perintah dan substitusi juga berlebihan.Jawaban terpendek adalah
sumber
Salah satu cara mudah adalah dengan hanya 'melarikan diri' dari ruang dengan \
sumber
Silakan coba di bawah ini:
Anda perlu menambahkan simbol "` "simbol yang ada pada tombol tilde di keyboard. Simbol mengatakan shell untuk menjalankan perintah pertama dan kemudian menetapkan ke variabel.
sumber
Dari pada:
Mencoba:
Selain itu, Anda tidak perlu penggantian perintah terakhir:
sumber
Punya masalah yang sama; harus memasukkan tanggal ke cetakan awk untuk diproses oleh splunk. Saya menggunakan
kemudian
sumber