Shell 变量值替换
Shell variable value substitution
这是我的问题的描述,我有一个从文件中获取值的 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,我认为它是旧版本
读入变量值时尝试去掉双引号,并在$table变量中使用双引号,例如:
schema=$(echo "$table" | cut -d'.' -f1)
tabname=$(echo "$table" | cut -d'.' -f2)
您可以像这样更有效地编写循环,使用 read
,而无需为要提取的每个字段使用 cut
等外部命令:
while IFS=. read -r schema table _; do
# your logic
done < "$folder/tables_ddl_list.log"
read
、_
的第三个参数是为了安全——如果输入在一行中有多个点,所有额外的值都会被_
捕获。或者,您可以根据是否设置 _
添加错误检查。
相关:
- Read tab-separated file line into array
- Looping through the content of a file in Bash
这是我的问题的描述,我有一个从文件中获取值的 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,我认为它是旧版本
读入变量值时尝试去掉双引号,并在$table变量中使用双引号,例如:
schema=$(echo "$table" | cut -d'.' -f1)
tabname=$(echo "$table" | cut -d'.' -f2)
您可以像这样更有效地编写循环,使用 read
,而无需为要提取的每个字段使用 cut
等外部命令:
while IFS=. read -r schema table _; do
# your logic
done < "$folder/tables_ddl_list.log"
read
、_
的第三个参数是为了安全——如果输入在一行中有多个点,所有额外的值都会被_
捕获。或者,您可以根据是否设置 _
添加错误检查。
相关:
- Read tab-separated file line into array
- Looping through the content of a file in Bash