我正在尝试将具有多个列值的行提取到不同的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变量。
答案 0 :(得分:0)
我自己通过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