Správný přístup je definovat svou vlastní funkci ve skriptu Bash.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Nyní můžete použít my_date jako by to byl externí program.
Například:
echo "It is now $(my_date)."
Nebo jednoduše:
my_date
Proč váš přístup nefunguje?
První problém je, že váš úkol je nefunkční.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Toto je analyzováno jako přiřazení řetězce date +%y-%m-%d do proměnné DATE_COMMAND . Po prázdném místě začne shell interpretovat zbývající symboly způsobem, který jste nezamýšleli.
To by mohlo být částečně opraveno změnou nabídky.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
To však problém ve skutečnosti neřeší, protože pokud nyní použijeme
echo $($DATE_COMMAND)
Nerozšíří argument správně. date program uvidí argumenty '+%y-%m-%d a %H:%M:%S' (s uvozovkami) místo jednoho řetězce. To lze vyřešit pomocí eval jako v
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
kde je proměnná DATE_COMMAND je nejprve rozšířen na řetězec date '+%y-%m-%d %H:%M:%S' to je potom eval zadáváno, jako by to bylo napsáno takto, tedy vyvolání date správně.
Všimněte si, že to ukazuji pouze pro vysvětlení problému. eval zde není dobré řešení. Místo toho použijte funkci.
PS Je lepší se vyhnout řetězcům identifikátorů psaným pouze velkými písmeny, protože ty jsou často v konfliktu s proměnnými prostředí nebo dokonce mají pro shell magický význam.
Útěk z prostoru mi funguje.
echo `date +%d.%m.%Y\ %R.%S.%3N`