我写了一个bash脚本countArgs.sh如下:
#!/bin/bash
function count
{
echo $#
}
count "arg1 $@"
我希望脚本的输出应该是它的输入数加1,而结果是这样的:
./countArgs.sh a b c
3
答案 0 :(得分:0)
你得到了计数3
,因为你在这里用双引号括起来的参数列表:
count "arg1 $@"
由于这个count
函数只获得这3个参数(在每个单独的行中):
arg1 a
b
c
如果您在printf
函数中放置count
行,则可以获得相同的输出:
count() {
printf "%s\n" "$@"
echo $#
}
请注意第一个位置参数是arg1 a
而不是arg1
。
如果您移除arg1 $@
周围的引号并将其命名为:
count arg1 "$@"
然后你会得到4
作为输出。
答案 1 :(得分:0)
两点:
首先,你在函数内部回显,这意味着$#
会给你数字或参数或你的函数,而不是你的脚本。
其次,您在引号$@
之间调用带参数"
的函数,但$@
默认情况下已经执行此操作,因此在变量扩展之后实际上它将如下所示:< / p>
count "arg1 a" "b" "c"
使用bash -x
运行脚本,您将看到它是如何工作的:
#!/bin/bash -x
function count
{
echo $#
}
count "arg1 $@"