Вы можете использовать мой скрипт, используя mv
.
mkdir downloaded
mv downloaded.zip downloaded && cd downloaded
unzip downloaded.zip && cd
Вы создадите папку (downloaded) и распакуете его в созданную папку.
Bash поддерживает переменную косвенность:
#!/bin/bash
MARCOMIN=1
MARCOMAX=3
ENZOMIN=1
ENZOMAX=3
GIOVANNIMIN=1
GIOVANNIMAX=3
VALUEMARCO=12
VALUEGIOVANNI=4
VALUEENZO=12
for i in MARCO ENZO GIOVANNI; do
for j in MIN MAX VALUE; do
varname="${i}${j}"
# For VALUE we need reverse order of i and j
[[ $j = VALUE ]] && varname="${j}${i}"
printf "%d is %s's %s\n" "${!varname}" "$i" "$j"
done
done
exit 0
Я сделал немного больше с внутренним циклом и использовал printf
вместо echo
, но основная идея заключается в том, что по имени переменной foo
, хранящемуся в другой переменной bar
, вы можете получить значение $foo
, выполнив ${!bar}
.
Подробнее:https://stackoverflow.com/questions/8515411/what-is-indirect-expansion-what-does-var-mean
Для использования раскрытия переменной внутри имени другой переменной традиционно используется встроенная команда оболочки eval
. Это часто приводит к синдрому наклонной зубочистки (множество обратных косых черт и двойных переходов), который предполагает, что может быть «лучший» способ выполнить то, что вы хотите сделать. Существуют также проблемы безопасности, связанные с использованием встроенной команды eval
.
В любом случае, это один из способов добиться желаемого:
# ...
eval echo \$${i}MIN is \$i\\\'s MIN
eval echo \$${i}MAX is \$i\\\'s MAX
eval echo \$VALUE${i} is \$i\\\'s VALUE
# ...