Shell变量值替换

时间:2019-03-08 15:35:34

标签: shell ksh

这里是我问题的描述,我有一个while循环,它从文件中获取值

while read table
do
    schema="$(echo $table | cut -d'.' -f1)";
    tabname="$(echo $table | cut -d'.' -f2)";
    echo "$schema";
    echo "$tabname";
    echo $folder/$table_space"_auto_ddl"/$tabname"_AUTO_"$schema".sql.tmp"
    echo $folder/$table_space"_auto_ddl"/${tabname}"_AUTO_"${schema}.sql
    print $schema.$tabname;
done < $folder/tables_ddl_list.log

这是一个值的示例

MCLM.OPPP

将值解析为2个变量 因此,在回显了$ schema之后,我期望得到MCLM 呼应$ tabname我希望OPPP

但是我会得到空字符串

我正在使用kornshell,我认为它是较旧的版本

2 个答案:

答案 0 :(得分:1)

尝试在读取变量的值时删除双引号,并在$ table变量中使用双引号,例如:

schema=$(echo "$table" | cut -d'.' -f1)
tabname=$(echo "$table" | cut -d'.' -f2)

答案 1 :(得分:1)

您可以使用read这样更有效地编写循环,而无需为要提取的每个字段使用诸如cut之类的外部命令:

while IFS=. read -r schema table; do
    # your logic
done < "$folder/tables_ddl_list.log"

相关: