ogs*_*ogs 5 variables bash shell
我必须执行一个函数,必须测试变量是否已在bash中正确定义,并且必须使用其关联值.
例如,这些变量在脚本顶部初始化.
#!/bin/bash
var1_ID=0x04
var2_ID=0x05
var3_ID=0x06
var4_ID=0x09
Run Code Online (Sandbox Code Playgroud)
我想调用名为test的脚本如下:
./test var1
Run Code Online (Sandbox Code Playgroud)
当前实现的功能是:
function Get()
{
if [ $1"_ID" != "" ]; then
echo "here"
echo $(($1_ID))
else
exit 0
fi
}
Run Code Online (Sandbox Code Playgroud)
here即使我进入./test toto或其他什么,我也不明白为什么我会得到.
我是否需要使用特定命令,例如grep?
您可能希望使用间接扩展:${!variable}然后-n检查它是否已定义:
在间接扩大包括呼吁与另一个变量的变量.也就是说,因为变量名称可能正在改变,而不是说$a我们说${!var}和var=a.
$ cat a
var1_ID=0x04
var2_ID=0x05
var3_ID=0x06
var4_ID=0x09
for i in {1..5}; do
v="var${i}_ID"
if [ -n "${!v}" ]; then # <-- this expands to varX_ID
echo "$v set to value: ${!v}"
else
echo "$v not set"
fi
done
Run Code Online (Sandbox Code Playgroud)
如果我们执行,我们得到:
$ ./a
var1_ID set to value: 0x04
var2_ID set to value: 0x05
var3_ID set to value: 0x06
var4_ID set to value: 0x09
var5_ID not set
Run Code Online (Sandbox Code Playgroud)
来自man test:
-n STRING
STRING的长度非零
使用参数扩展:
: ${var:?}
Run Code Online (Sandbox Code Playgroud)
如果空字符串是有效值,则删除冒号(即,您只想测试定义性).
: ${var?}
Run Code Online (Sandbox Code Playgroud)
如果您不希望脚本停止此问题,则可以使用
if [[ ${var:+1} ]] ; then
# OK...
else
echo Variable empty or not defined. >&2
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20648 次 |
| 最近记录: |