我想测试一个函数参数中给出的变量的名称是否包含某个字符串,如果它没有/做不同的动作。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
但是当运行e脚本它给出以下错误消息:
./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 *',而不是shell变量的名称。 'prefix'只是一串字符。 – rici