前9个参数从$ 1- $ 9引用,$ 10被解释为$ 1后跟0.我如何解释这个并访问大于10的函数的参数?
感谢。
答案 0 :(得分:27)
使用:
#!/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
答案 1 :(得分:4)
如果您使用bash,则可以使用${10}
。
$ {...}语法似乎符合POSIX标准,但最好使用shift
这样的命令:
while [ "$*" != "" ]; do echo "Arg: $1" shift done编辑:我注意到我没有解释
shift
的作用。它只是移动脚本(或函数)的参数。例如:
> cat script.sh echo "$1" shift echo "$1" > ./script.sh "first arg" "second arg" first arg second arg
如果它可以提供帮助,这里有一个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"
答案 2 :(得分:2)
通常,为了安全起见,当Bash解释代码时,整个给定字符串用于变量名称,您需要将其括在大括号中:${10}