Bash脚本函数返回值问题

Eed*_*doh 1 linux bash shell scripting return-value

任何人都可以帮我从bash脚本函数返回正确的值吗?

这是我的函数,它应该返回作为参数传递的文件的第一行(也是唯一的):

LOG_FILE_CREATION_TIME()
{
    return_value=`awk 'NR==1' $1`
    return return_value
}
Run Code Online (Sandbox Code Playgroud)

这是我在另一个脚本中对该函数的调用:

LOG_FILE_CREATION_TIME "logfile"
timestamp=$?
echo "Timestamp = $timestamp"
Run Code Online (Sandbox Code Playgroud)

我总是用这段代码得到一些随机值.例如,如果"logfile"中的值为62772031,我会得到

时间戳= 255

作为输出.对于文件中的其他一些值,我将其他随机值作为返回值,而不是正确的值.

有任何想法吗?

Kei*_*ith 7

Shell函数就像命令一样工作.它们只能返回错误级别值(整数).要获取字符串,您可以设置全局变量,或者打印/回显该值,然后让调用者使用命令替换(如反向标记).

这有效:

#!/bin/bash

LOG_FILE_CREATION_TIME()
{
    return_value=`awk 'NR==1' $1`
    echo $return_value
}

timestamp=$(LOG_FILE_CREATION_TIME $1)

echo $timestamp
Run Code Online (Sandbox Code Playgroud)

不相关,但在Python中BTW:

#!/usr/bin/python2

import sys
print open(sys.argv[1]).readline()
Run Code Online (Sandbox Code Playgroud)

;-)


plu*_*dra 5

退出代码仅限于0 - 255,您不能将其用于时间戳.

回应你的时间戳,因为你似乎没有输出任何其他东西; 这应该没问题?

LOG_FILE_CREATION_TIME()
{
    # If you want to do some more stuff, you might want
    # to use the intermediate variable as you first did.
    awk 'NR==1' $1
}

timestamp=$(LOG_FILE_CREATION_TIME "logfile")
echo "Timestamp = $timestamp"
Run Code Online (Sandbox Code Playgroud)

您可能已经简化了示例中的函数,因为如果您想要的只是第一行,为什么不使用head -1 logfile