【问题标题】:aix shell trouble getting value returned from functionaix shell 无法从函数中获取返回值
【发布时间】:2014-01-08 17:01:38
【问题描述】:

在 RES 下面的脚本中总是返回空;不知道我做错了什么。

提前致谢。

#!/bin/sh
set -x
chk_for() {
    RES=0
    RES= $(head -1 $1 | fgrep -c "Formula" >&2) 
    echo "@@@@" || $RES
    return $RES
    }

for X in /home/wstandke/webcatstats/rep/AnalysisWork/*; do
    chk_for "$X" 

    if [$? == 1]
        then 
           echo "1st line is heading"
            file=$(basename $X)
            echo "fullname=" || $X
            echo "filename=" || $file
           mv $X /tmp/$file
            sed 1d /tmp/$file > $X
            rm /tmp/$file
    fi
done
cat /home/wstandke/webcatstats/rep/AnalysisWork/*  >/tmp/Analysis.report

【问题讨论】:

  • aix /#!/bin/sh 几乎可以肯定是原始的 Bourne Shell,它不支持 $(cmd_substitution)。尝试删除空格,如下所示并改用backtics。最好了解正在处理的内容,打开 shell 跟踪功能set -vx 以查看发生的变量扩展。祝你好运。
  • @shelter 不...可能不会。 /bin/sh 通常是 ksh。 /bin/bsh (我记得)是 Bourne Shell。我记得,有一个选项可以设置它。我相信一个选项甚至将其设置为 ksh93。

标签: shell unix aix


【解决方案1】:

您将fgrep 的输出重定向到stderr,因此没有为RES 分配任何值。

另外,不确定这是否是 问题,但RES= 后面有一个空白,可能会将空白分配给RES

尝试将有问题的行更改为:

RES=$(head -1 $1 | fgrep -c "Formula") 

【讨论】:

  • +1 表示等号和要分配的值之间的空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
相关资源
最近更新 更多