Bash 如果有9个以上的参数,如何访问函数的参数?
由于前9个参数是从$1到$9引用的,所以$10被解释为$1,后面跟着一个0。如何解释这一点并访问大于10的函数的参数 谢谢。使用:Bash 如果有9个以上的参数,如何访问函数的参数?,bash,function,shell,arguments,Bash,Function,Shell,Arguments,由于前9个参数是从$1到$9引用的,所以$10被解释为$1,后面跟着一个0。如何解释这一点并访问大于10的函数的参数 谢谢。使用: #!/bin/bash echo ${10} 要使用$10测试差异,请在foo.sh中编写代码: #!/bin/bash echo $10 echo ${10} 然后: $ ./foo.sh first 2 3 4 5 6 7 8 9 10 first0 10 如果您有以下情况,则同样适用: foobar=42 foo=FOO echo $foobar # e
#!/bin/bash
echo ${10}
要使用$10测试差异,请在foo.sh中编写代码:
#!/bin/bash
echo $10
echo ${10}
然后:
$ ./foo.sh first 2 3 4 5 6 7 8 9 10
first0
10
如果您有以下情况,则同样适用:
foobar=42
foo=FOO
echo $foobar # echoes 42
echo ${foo}bar # echoes FOObar
如果要删除歧义,请使用{}
my2c一般来说,为了安全起见,在Bash解释代码时,整个给定字符串被用作变量名,您需要将它括在大括号中:
${10}
如果您使用Bash,那么您可以使用${10}
${…}语法在这种特殊情况下似乎与POSIX兼容,但最好像这样使用命令shift
:
while [ "$*" != "" ]; do
echo "Arg: $1"
shift
done
如果有帮助,下面是一个getopt/shift示例:
while getopts a:bc OPT; do
case "$OPT" in
'a')
ADD=1
ADD_OPT="$OPTARG"
;;
'b')
BULK=1
;;
'c')
CHECK=1
;;
esac
done
shift $( expr $OPTIND - 1 )
FILE="$1"
而getopts a:bc OPT;做
案例“$OPT”加入
"a")
相加=1
添加_OPT=“$OPTARG”
;;
"b")
体积=1
;;
"c")
检查=1
;;
以撒
完成
班次$(expr$OPTIND-1)
FILE=“$1”
您可以发布一个示例脚本,但它不起作用?我相信10美元应该工作并包含在第十个参数中…@ dks:不,如果你不使用<代码> {} /代码>它认为10美元为1美元,而垃圾0i不知道你使用的是什么“代码> BASH < /代码>,但是<代码> $< /代码>是贪婪的:<代码> $FoBar 会给你42,而不是FooBar。如果希望
$foo
后跟文字“bar”
,则需要${foo}bar
。我不会投你反对票,因为你答案中“真实”的部分是正确的,但你可能想修正(或删除)令人不快的部分。@paxdiablo:是的,这是一个糟糕的未经测试(我的耻辱)的例子。。。谢谢,这样更好,所以+1。我自由地将foo
设置为foo
,因为变量名和值可能会混淆。希望你不介意。干杯。@paxdiablo:一点也不。干杯。您可能想要$#-ne 0
而不是“$*”!=“”
在某些情况下,当和移位时,无需使用。您可以在“$@”
中为arg使用,或为arg使用。
while getopts a:bc OPT; do
case "$OPT" in
'a')
ADD=1
ADD_OPT="$OPTARG"
;;
'b')
BULK=1
;;
'c')
CHECK=1
;;
esac
done
shift $( expr $OPTIND - 1 )
FILE="$1"