Bash関数を介してvoidパラメータを渡すにはどうすればよいですか?

Bash関数を介してvoidパラメータを渡すにはどうすればよいですか?

私は次のスクリプトのようなものを書いています。関数が「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
}

上記のコードを使用すると、次のようにプロンプ​​トで送信されたときにgeneratePrg関数が実行されます。

$HOME/execsh/delete.sh $1 \'\' $d

「void」パラメータは文字列で指定されます。つまり、スクリプト''に送信されたdelete.sh2番目のパラメータは「void」パラメータではありません。

ベストアンサー1

参照変数の拡張。

スクリプトがある場合foo.sh

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

これを呼び出すために使用するsh foo.sh ""出力は次のとおりです。

><
><
>foo<

つまり、(のパラメータ)の空のパラメータ1つ、"$1"スクリプトfoo.shハードコーディングの別のパラメータ、固定文字列です。""foo

$@あるいは、いずれかを引用符で囲まないと、$1関連するヌル値がトークン化の一部として消えます。

望むより:

おすすめ記事