首页 > 解决方案 > 从逗号分隔的字符串中传递值并分配给 korn shell 中的不同变量

问题描述

我将 SQL 查询的结果作为逗号分隔的字符串导出到变量。如何将字符串中的每个值分配给变量名并导出。

$SQLOUTPUT_STRING=1,2018-05-16,abc,123

我想将上面字符串中的值分配给变量并导出它们

export VAR1=1
export VAR2=2018-05-16
export VAR3=abc
export VAR4=123

我在其他脚本中使用这些变量,所以我不能像上面那样命名这些通用变量,所以 VAR1、VAR2、VAR3、VAR4 不会是这种情况,它会是不同的名称。

提前致谢。

标签: sqlshellteradataksh

解决方案


您可以cut在 shell 脚本中使用该命令来获取 CSV 文件的单个字段或整列,每次调用该cut命令一个。cut期望通过标准输入提供输入 CSV 数据,因此您可以使用“here”文档外壳功能将SQLOUTPUT_STRING外壳变量的内容显示为标准输入。

以下命令序列将分别分配值12018-05-16abc123to :VAR1VAR2

SQLOUTPUT_STRING=1,2018-05-16,abc,123

export VAR1=`cut -d, -f1 <<
$SQLOUTPUT_STRING
EOF
`
export VAR2=`cut -d, -f2 <<
$SQLOUTPUT_STRING
EOF
`
export VAR3=`cut -d, -f3 <<
$SQLOUTPUT_STRING
EOF
`
export VAR4=`cut -d, -f4 <<
$SQLOUTPUT_STRING
EOF
`

注意我使用了传统的 Bourne shell 反引号转义来使 shell 执行包含在反引号中的命令,并使用其输出作为文字替换值在export语句中就地展开,因为您特别要求可移植 shell 代码。现代 ksh shell 语法中可能存在替代语法和重定向运算符。


推荐阅读