Предполагая GNU date (1)
:
mv sample.xml A"$(date +%Y%m%d.%H%M)_$(date -d 'now +3 minutes' +%H%M)"
В bash-4.3
или выше вы можете использовать namerefs:
a0=(a b c)
i=0
typeset -n Name="a$i"
echo "${#Name[@]}"
или всегда использовать eval
. В любом случае, не думайте, что использование bash
namerefs безопаснее, чем eval
. Как и для eval
, вам все равно нужно убедиться, что содержимое $Name
является допустимым именем переменной оболочки. Такие значения, как x[`evil-command>&2`0]
, по-прежнему будут вызывать выполнение evil-command
при расширении $Name
или . ${#Имя}
. То же самое относится к ${!var}
.
С помощью ksh93
вместо этого вы можете использовать многомерные массивы:
a[0]=(a b c)
i=0
echo "${#a[i][@]}"
zsh
имеет более последовательные способы объединения своих операторов расширения:
a0=(a b c)
i=0
name=a$i
echo ${(P)#name}
(P
для расширение косвенного параметра).
Вы можете использовать eval
явно, но не злоупотребляйте этим:
eval "len=\${#$Name[@]}"