braces - bash:使用以下代码执行“for循环”后显示变量的空值
问题描述
从“for循环”创建一个变量,然后将一个字符串关联到它。新值显示为null。
预期输出:colname1=hash(id) as id
colname2=hash(cust) as cust
实际输出:
colname1=' '
colname2=' '
#!/bin/bash
hcd1="hash(" # string to be added
hcd2=")as " #string to be added
dmk=id,cust
IFS=" ,"
i=0
for val in ${dmk}
do
i=$((++i))
eval var${i}="${val}"
done
for ((j=1;j<=i;++j))
do
name="var${j}"
colname="col${j}"
echo ${colname} = "$hcd1${!name}$hcd2 ${!name}"
done
echo "$colname1 $colname2 "
解决方案
一些注意事项:
- ${dmk} 不扩展逗号。你的循环将是:一个元素:'id,cust'
- 您不需要花括号来插入变量 ${dmk} 与 $dmk 相同
- ${!name} 似乎无效。可能你的意思是 $name
有一些修正
#!/bin/bash
hcd1="hash(" # string to be added
hcd2=")as " #string to be added
dmk="id cust"
#IFS=" ,"
i=0
for val in $dmk
do
i=$((++i))
eval var$i="$val"
#echo var$i="$val"
done
for ((j=1;j<=i;++j))
do
eval name='$'"var$j"
colname="col$j"
echo $colname = "$hcd1$name$hcd2 $name"
done
输出:
col1 = hash(id)as id
col2 = hash(cust)as cust
推荐阅读
- python - MySQL 查询未在 Django HTML 页面上可视化
- angular - 试图继承/扩展 ngx-translate 管道函数但返回空字符串
- javascript - 两个foreach或for循环内部的axios无法访问外部数据
- swift - 实现 JSON Web 服务后获取 JSON 数据
- java - java jstl中外键的DAO控制器
- javascript - js 异步与正确的错误处理,无需等待
- express - 实时将 webhook 数据从服务器发送到客户端
- node.js - vsts 托管代理 docker 容器(ubuntu) - 无法运行夜间测试(连接到端口 4444 上的 127.0.0.1 时出错
- python - IndentationError: 期望一个缩进的块
- python - 无法在 Python 中初始化对象