首页 > 解决方案 > 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 "

标签: braces

解决方案


一些注意事项:

  • ${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

推荐阅读