如何允许我通过 bash 函数传递 void 参数?

如何允许我通过 bash 函数传递 void 参数?

我正在写类似以下脚本的内容。它没有按预期工作,因为该函数deleteCEfromCeLst必须调用一个脚本,通过该spawnPrg函数为其指定一个“void”参数,但是如果我在函数参数中指定直接从提示符调用脚本时使用的spawnPrg“void”参数,则此“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”参数。

答案1

引用变量扩展。

如果我们有一个脚本foo.sh

$ cat foo.sh 
#!/bin/sh
args() {
        printf ">%s<\n" "$@"
}
args "$1" "" foo

我们用 来调用它sh foo.sh "",输出是:

><
><
>foo<

也就是说,一个来自"$1"( 的参数)的空参数,另一个来自脚本中的foo.sh硬编码,然后是固定字符串。""foo

如果$@或中的任何一个$1未被引用,则相关的空值将作为分词的一部分消失。

看:

相关内容