我正在编写类似于以下脚本的内容。它没有按预期工作,因为该函数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
:我们用 调用它
sh foo.sh ""
,输出是:也就是说,一个空参数来自
"$1"
(参数foo.sh
),另一个来自脚本中的硬编码""
,然后是固定字符串foo
。如果其中一个
$@
或$1
将不被引用,则有问题的空值将作为分词的一部分消失。看: