簡體   English   中英

如何將bash / awk命令放入變量(不輸出命令)

[英]How to put bash / awk commands into a variable ( not output of commands)

我試圖只是將bash命令放入一個變量中,然后使用退出代碼功能運行。

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

check_exit $command1 # Step2

在這里,它運行步驟1中的命令,並且始終返回0退出代碼。

如何將命令放入變量中,然后再使用退出功能運行。

您可以通過以下方式聲明函數:

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"
}

注意將變量放在雙引號內以防止單詞分裂和路徑名擴展。

一些POSIXists寧願您使用舊版本來實現兼容性,但是如果您僅使用bash運行代碼,則所有內容都可以作為首選項。

您還可以使用另一個功能,例如checkexit ,它可以檢查命令的退出代碼:

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

示例運行:

checkexit command1

嘗試使用功能:

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

順便說一句,我在函數中的變量周圍加上了一些引號,因為如果它們的值包含空格,通常是個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM