我正在写一个bash脚本,它接受一些可选参数。我想翻译它们并将它们传递给另一个脚本。但是,我很难适时地传递可选参数。如何将可选参数传递给bash脚本中的另一个命令?
这里是什么,我设法学会了伪工作纲要:
a.sh:
if arg1 in arguments; then
firstArg="first argument"
fi
if arg2 in arguments; then
secondArg="second argument"
fi
./b.sh $firstArg $secondArg "default argument"
注意,在参数的空间。
b.sh:
for arg in "[email protected]"
do
echo $arg
done
我想打电话给b.sh
,任选firstArg
和secondArg
和默认参数,如下所示:
./b.sh $firstArg $secondArg "default argument"
这样做的问题是,如果$firstArg
或$secondArg
是带空格的字符串,它们将被表示为多个参数,并且输出将如下所示:
first
argument
second
argument
default argument
好了,这是很容易解决,让我们加入周围的引号,像这样获取的参数的整个字符串:
./b.sh "$firstArg" "$secondArg" "defaultArg"
问题是,如果,例如,firstArg
没有设置,它导致一个空行(因为它会解释""
作为参数),所以输出会是这样的:
(blank line here)
second argument
defaultArg
我还试图构建一个字符串,并将其传递给shell脚本,但它不似乎也以这种方式工作(it int将整个字符串作为参数进行错误处理,即使我用引号分隔参数)。
请注意,从命令行调用b.sh
引用的参数可以正常工作。有没有办法在bash脚本中模仿这种工作方式?
旁白:就因为我复制你的铅和使用'.sh'扩展在可执行文件上(即具有'execv()' - 家族调用成功的+ x权限的文件)并不意味着这是个好主意。通常,UNIX中的命令不应该有任何扩展名,无论它们是通过shell脚本,Python脚本还是编译的二进制文件提供的。 –
您能否明确说明这是否适用于使用'#!/ * bin/sh'或'#!/ bin/bash'? –
我正在使用bash。 – Andrew