Shell变量截断值

时间:2016-09-15 10:46:32

标签: unix

我正在使用这个shell脚本

#!/bin/sh

file_name="'STG_MAP_RM_ARN'"

var_log_tbl_date="'29-MAR-2016'"

var_err_file_list=$($ORACLE_HOME/bin/sqlplus -s obi_user/obi_user@UNNATIDEV
<<
END

set pagesize 0 feedback off verify off heading off echo off;

SELECT WM_CONCAT(A) FROM (SELECT DISTINCT COL15 AS A FROM ERROR_TABLE WHERE FILENAME=${file_name} AND FILEDATE=${var_log_tbl_date});

exit;

END
)

echo $var_err_file_list

如果我在sql中执行命令,则输出为:

  

20160727_RM_ARN_MAPPING.csv,YYYYMMDD_RM_ARN_MAPPING.csv,20160728_RM_ARN_MAPPING.csv

但是shell脚本输出是:

  

20160727_RM_ARN_MAPPING.csv,YYYYMMDD_RM_ARN_MAPPING.csv,20160728_RM_ARN_MAPPING。

如您所见,shell输出被截断(o / p中缺少.csv)

Unix中的变量大小是否有限制?

请帮帮我

2 个答案:

答案 0 :(得分:1)

几乎没有其他选择:

1)您可以使用mktemp命令创建临时文件,将内容重定向到该文件,根据需要重复使用内容,然后删除该文件。

    mktemp mytemp_file_XXXXXXXXX.log

2)像mk_fifo这样的替代品与tee命令结合使用,可以复制输出并将其引导到多个命令中。如果你的shell允许你(ksh93,zsh,bash),你也可以安排重复的输出,如下所示:

    # Writes stdout into both
    cat main.c > 1.txt > 2.txt

    #Duplicates output to two cat commands; also writes it to console
    cat main.c | tee >( cat>1.txt) >(cat>2.txt)

要使用这些功能,您需要bash,zsh或ksh93。

请参阅此相关post

答案 1 :(得分:-1)

似乎没有每个变量限制,但所有变量的总体限制在一起。 看到: What is the maximum size of an environment variable value?