我试图获取具有多个列值的行到不同的shell变量。事实上我发现,所有列值都可以存储到单个shell变量中。但是,如何将这些列值分隔为单独的shell变量。以下是我暂时尝试的一个例子
function sqlQuery {
sqlplus -S shiyas/********* <<'EOF'
set heading OFF termout ON trimout ON feedback OFF
set pagesize 0
SELECT name,open_mode from v$database;
EOF
}
OUTPUT="$( sqlQuery )"
echo $OUTPUT
在这里,我得到的输出为
ORCL READ WRITE
但我的要求是列值ORCL,READ WRITE应该分配给不同的shell变量。
我尝试了下面的解析。
echo "$OUTPUT" | while read name open_mode
但它抛出意外的文件错误结束。
-bash-3.2$ sh call_sql_col_val_1.sh
ORCL READ WRITE
call_sql_col_val_1.sh: line 18: syntax error: unexpected end of file
请让我知道我可以使用什么概念将单行列值提取到不同的shell变量。
我自己通过eval
这样做:
oracle@******:/*****> cat test.sh
#!/bin/bash
function sqlQuery {
sqlplus -S / as sysdba <<'EOF'
set heading OFF termout ON trimout ON feedback OFF
set pagesize 0
SELECT name,open_mode from v$database;
EOF
}
eval x=(`sqlQuery`)
NAME=${x[0]}
OPEN_MODE="${x[1]} ${x[2]}"
echo NAME IS $NAME
echo OPEN_MODE IS $OPEN_MODE
因此,我们运行与上面相同的功能,将其传递到x
并通过eval
运行它来处理分隔。然后你有一个数组,并且调用调用是这样的:例如,第一项的x[0]
。
输出是:
oracle@******:/******> sh test.sh
NAME IS ******
OPEN_MODE IS READ WRITE