我正在编写一个 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 "$@"
do
echo $arg
done
我想打电话b.sh
,可选地与firstArg
and secondArg
和一个像这样的默认参数:
./b.sh $firstArg $secondArg "default argument"
这样做的问题是,如果$firstArg
or $secondArg
是带有空格的字符串,它们将表示为多个参数,输出将类似于:
first
argument
second
argument
default argument
好的,这很容易解决,让我们通过在参数周围添加引号来捕获整个参数字符串,如下所示:
./b.sh "$firstArg" "$secondArg" "defaultArg"
问题是,例如,firstArg
未设置,它会导致一个空行(因为它会解释""
作为参数),因此输出将类似于:
(blank line here)
second argument
defaultArg
我还尝试过构造一个字符串并将其传递给 shell 脚本,但它似乎也不是这样工作的(它将整个字符串解释为参数,即使我用引号将参数分开)。
请注意,调用b.sh
从我的命令行中引用的参数工作得很好。有没有办法在 bash 脚本中模拟它的工作原理?