Pendekatan yang benar adalah dengan mendefinisikan fungsi Anda sendiri di dalam skrip Bash Anda.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Sekarang Anda dapat menggunakan my_date
seolah-olah itu adalah program eksternal.
Misalnya:
echo "It is now $(my_date)."
Atau sederhananya:
my_date
Mengapa pendekatan Anda tidak berhasil?
Masalah pertama adalah tugas Anda rusak.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Ini diuraikan sebagai penugasan dari string date +%y-%m-%d
ke variabel DATE_COMMAND
. Setelah kosong, shell mulai menginterpretasikan simbol yang tersisa dengan cara yang tidak Anda inginkan.
Ini dapat diperbaiki sebagian dengan mengubah kutipan.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
Namun, ini tidak benar-benar menyelesaikan masalah karena jika sekarang kita menggunakan
echo $($DATE_COMMAND)
Itu tidak akan memperluas argumen dengan benar. date
program akan melihat argumen '+%y-%m-%d
dan %H:%M:%S'
(dengan tanda kutip) alih-alih satu string. Ini dapat diselesaikan dengan menggunakan eval
seperti pada
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
di mana variabel DATE_COMMAND
pertama kali diperluas ke string date '+%y-%m-%d %H:%M:%S'
yaitu eval
uated seolah-olah ditulis seperti itu sehingga memanggil date
dengan benar.
Perhatikan bahwa saya hanya menunjukkan ini untuk menjelaskan masalahnya. eval
bukan solusi yang baik di sini. Gunakan fungsi sebagai gantinya.
PS Lebih baik menghindari string pengidentifikasi huruf besar semua karena sering bertentangan dengan variabel lingkungan atau bahkan memiliki makna ajaib pada shell.
Melarikan diri dari ruang bekerja untuk saya.
echo `date +%d.%m.%Y\ %R.%S.%3N`