如何把bash / awk命令放入一个variables(不是输出命令)

我试图把bash命令放入一个variables,然后运行退出代码function。

command1="$(awk -v previous_date=$reply -f $SCRIPT_HOME/tes.awk <(gzip -dc $logDir/*) > $OUTFILE)" # Step 1 check_exit $command1 # Step2 

这里它在步骤1中运行命令并始终返回0退出代码。

我怎样才能把命令放入一个variables,然后运行退出函数。

尝试使用一个函数:

 do_stuff() { echo "$var"; echo that; } 

您稍后可以调用此函数并检查错误代码:

 $ var="this" $ do_stuff this that $ echo $? 0 

在脚本的全局范围中定义的变量将对该函数可见。

所以对于你的例子:

 command1() { awk -v previous_date="$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir/*") > "$OUTFILE"); } check_exit command1 

顺便说一句,我在你的函数中加了一些引号,因为如果它们的值包含空格,通常是个好主意。

你可以这样声明你的函数:

 function command1 { awk -v "previous_date=$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir"/*) > "$OUTFILE" } 

或者更老的形式:

 command1() { awk -v "previous_date=$reply" -f "$SCRIPT_HOME/tes.awk" <(gzip -dc "$logDir"/*) > "$OUTFILE" } 

请注意将变量放在双引号内以防止分词和路径名扩展。

有些POSIX会更喜欢使用旧版本的兼容性,但是如果你只是用bash来运行你的代码,那么所有的东西都可以成为首选。

你也可以有另外一个checkexit函数来检查命令的退出码:

 function checkexit { "$@" echo "Command returned $?" } 

示例运行:

 checkexit command1