
私は次のスクリプトのようなものを書いています。関数が「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.sh
2番目のパラメータは「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
関連するヌル値がトークン化の一部として消えます。
望むより: