Bash
如何允許通過 bash 函式傳遞 void 參數?
我正在編寫類似於以下腳本的內容。它沒有按預期工作,因為該函式
deleteCEfromCeLst
必須呼叫一個腳本,通過該spawnPrg
函式為其指定一個“void”參數,但是如果我在spawnPrg
函式參數中指定“void”參數''
,我會在$HOME/execsh/delete.sh
直接呼叫腳本時使用它從提示符開始,此“無效”參數(正確)結果為空,而不是未指定的參數。該
spawnPrg
函式的使用是強制性的,因為它將被從“主”流呼叫的其他函式或直接由主流呼叫的函式使用,此外,該函式spawnPrg
應包含註冊日誌文件之類的行為的行為。#!/bin/bash spawnPrg() { echo $@ $@ & return } deleteCEfromCeLst() { local d cat ce.lst | while read d; do spawnPrg $HOME/execsh/delete.sh $1 '' $d done return } deleteCEfromCeLst exit
我也嘗試編碼
deleteCEfromCeLst
為:deleteCEfromCeLst() { local d cat ce.lst | while read d; do spawnPrg "$HOME/execsh/delete.sh $1 '' $d" done return }
使用上面的程式碼,結果是函式 spawnPrg 被執行,因為它被發送到提示符,如下所示:
$HOME/execsh/delete.sh $1 \'\' $d
其中“void”參數指定為字元串
''
,即發送到delete.sh
腳本的第二個參數不是“void”參數。
引用變數擴展。
如果我們有一個腳本
foo.sh
:$ cat foo.sh #!/bin/sh args() { printf ">%s<\n" "$@" } args "$1" "" foo
我們用 呼叫它
sh foo.sh ""
,輸出是:>< >< >foo<
也就是說,一個空參數來自
"$1"
(參數foo.sh
),另一個來自腳本中的硬編碼""
,然後是固定字元串foo
。如果其中一個
$@
或$1
將不被引用,則有問題的空值將作為分詞的一部分消失。看: