Bash
從 Bash 變數返回本地值?
我研究了這篇名為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,除非出現異常情況)來隱藏擷取的命令的退出狀態。