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
作为输出.对于文件中的其他一些值,我将其他随机值作为返回值,而不是正确的值.
有任何想法吗?
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)
;-)
退出代码仅限于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?