Bash

如何允許通過 bash 函式傳遞 void 參數?

  • February 2, 2019

我正在編寫類似於以下腳本的內容。它沒有按預期工作,因為該函式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將不被引用,則有問題的空值將作為分詞的一部分消失。

看:

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