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`