如何在ksh Shell脚本的循环中显示变量名及其对应值?
在ksh脚本的for循环中获取变量名与对应值
要实现你的需求,核心是间接引用变量——通过循环变量(A/B/C/D)获取它们对应的实际值,而非保留字面量$i。下面提供两种可行的解决方案:
方法1:使用eval(兼容所有ksh版本)
eval可以解析动态生成的变量引用,正确写法是先通过eval获取变量值,再拼接字符串:
#!/bin/ksh A=var1 B=var2 C=var3 D=var4 param="" for i in A B C D do # 通过eval获取变量i对应的实际值 val=$(eval echo "\$$i") # 拼接目标参数字符串 param="$param -p \"$i=$val\"" done echo "$param"
执行后输出:
-p "A=var1" -p "B=var2" -p "C=var3" -p "D=var4"
方法2:使用ksh93+的间接引用语法(更安全)
如果你的环境是ksh93或更高版本,支持${!变量名}的间接引用语法,无需eval即可直接获取值:
#!/bin/ksh A=var1 B=var2 C=var3 D=var4 param="" for i in A B C D do # 直接通过${!i}获取变量i对应的值 val=${!i} param="$param -p \"$i=$val\"" done echo "$param"
原脚本问题说明
你原来的写法中,\$i对$进行了转义,导致shell将其当作字面量$i处理,而非解析为变量i对应的实际变量值,这就是输出里都是$i而非预期值的原因。
内容的提问来源于stack exchange,提问作者sk123
相关产品推荐
相关产品推荐

