Bash

從 Bash 變數返回本地值?

  • March 8, 2019

我研究了這篇名為Returning Values from Bash Functions 的文章。數據

Lorem.
\begin{document}
hello
\end{document}

案例 #1 不起作用

程式碼

#!/bin/bash
function getStart {
       local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
}

START2=$(getStart)
echo $START2

它錯誤地返回一個空行。我期待1為什麼腳本返回一個空行?

案例 #2 有效

程式碼

#!/bin/bash
function getStart {
       local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
       echo $START
}

getStart

哪個列印正確1

choroba 答案的輸出

#!/bin/bash
function getStart {
       local START="$(awk '/begin\{document\}/{ print NR; exit }' data.tex)"
       echo $START
}

START2=$(getStart)
echo $START2

只給出一次行號,這不是預期的結果。我認為它應該做兩次。

$(...)(又名“命令替換”)擷取...命令的輸出。為變數賦值不會產生任何輸出,因此沒有什麼可擷取的。在案例 #2 中,echo產生輸出。

getStart () {
   local l=Hallo
   echo $l
}

v=$(getStart)
echo $v

回答您的更新:函式輸出Hallo。此輸出由命令替換擷取,因為這是命令替換所做的,因此在 之前v=$(getStart),腳本不會產生任何輸出。然後線路echo $v輸出Hallo

只需在其中執行 awk 命令,然後忘記擷取。函式可以回顯某些內容,此外,它們確實返回退出狀態。如果您沒有顯式返回(例如,return 1),則函式的退出狀態將是最後一個命令的退出狀態。這就是為什麼您可能不想在函式中擷取 + echo 的原因。它將使用 echo 的退出狀態(0,除非出現異常情況)來隱藏擷取的命令的退出狀態。

引用自:https://unix.stackexchange.com/questions/229038