Я хотел бы проверить, содержит ли имя переменной, заданной как аргумент функции, определенную строку, и выполняет разные действия, если это делает/не делает.Bash определить, если имя переменной содержит строку
Вот очень общее описание того, что я хочу добиться:
#!/bin/bash
varA="a"
varB="b"
varC="c"
varD="d"
varE="e"
varF="f"
function1()
{
if name of argument $1 does not contain "A"; then
echo "no A in $1"
further actions done using the value of varA and others...
elif name of argument $1 contains "A"; then
echo "A in $1"
further actions done using the value of varA and others...
fi
}
function1 $varA $varB $varC
function1 $varD $varE $varF
И при запуске это даст
A in varA
no A in varD
Я видел, при этом некоторые исследования, что имя переменной может будем называть $ {! var @}, так что вот код, который я пробовал:
1 #!/bin/bash
2
3 varA="a"
4 varB="b"
5 varC="c"
6 varD="d"
7 varE="e"
8 varF="f"
9
10 function1()
11 {
12 if [[ "${[email protected]}" != *"A" ]]; then
13 echo "no A in $1"
14 elif [[ "${[email protected]}" == *"A" ]]; then
15 echo "A in $1"
16 fi
17 }
18
19 function1 $varA $varB $varC
20 function1 $varD $varE $varF
Но при запуске В этом сценарии приводятся следующие сообщения об ошибках:
./testx.sh: line 12: ${[email protected]}: bad substitution
./testx.sh: line 12: ${[email protected]}: bad substitution
Любая помощь будет очень признательна! Спасибо
Я не думаю, что это возможно с позиционными аргументами. Когда функция вызывается, переменные заменяются значениями, поэтому для ссылки на нее нет имени переменной. – karakfa
Вызов фактически 'function1 $ varA $ varB $ varC' (см. Мой второй код), и я не использую значения переменных здесь, но в реальном скрипте, над которым я работаю, я хочу использовать их значения для выполните другие действия в функции. – arielle
@arielle: ОК. В этом случае это невозможно. Обратите внимание, что '$ {! Prefix @}' "Расширяется до имен переменных, имена которых начинаются с' prefix'; то есть эквивалент файла glob 'prefix *', но над именами переменных оболочки. 'prefix' - это всего лишь строка символов. – rici