【问题标题】:How do I access arguments to functions if there are more than 9 arguments?如果有超过 9 个参数,我如何访问函数的参数?
【发布时间】:2011-06-16 13:00:46
【问题描述】:

前 9 个参数是从 $1-$9 引用的,$10 被解释为 $1 后跟一个 0。我该如何解释这一点并访问大于 10 的函数的参数?

谢谢。

【问题讨论】:

  • 您可以发布一个不起作用的示例脚本吗?我相信 10 美元应该可以正常工作并包含第 10 个参数...
  • @dkson:没有。如果您不使用{},则将 10 美元视为 1 美元,将 0 视为 0

标签: bash function shell arguments


【解决方案1】:

使用:

#!/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 你在 使用什么,但$ 很贪心:$foobar 会给你 42,不是我> foobar。如果您想要$foo 后跟文字"bar",则需要${foo}bar。我不会对您投反对票,因为您答案的“真实”部分是正确的,但您可能想要修复(或删除)有问题的部分。
  • @paxdiablo:是的,这是一个糟糕的未经测试(我的耻辱)的例子......谢谢。
  • 这样更好,所以+1。我冒昧地将foo 设置为FOO,因为变量名和值相同可能会造成混淆。希望你不要介意。干杯。
  • @paxdiablo:一点也不。干杯。
【解决方案2】:

如果你使用的是 bash,那么你可以使用${10}

${...} 语法在这种特殊情况下似乎符合 POSIX,但最好像这样使用命令 shift

而 [ "$*" != "" ];做 回声“Arg:$ 1” 转移 完毕

编辑:我注意到我没有解释 shift 的作用。它只是改变脚本(或函数)的参数。示例:

> 猫脚本.sh 回声“$ 1” 转移 回声“$ 1” > ./script.sh "第一个参数" "第二个参数" 第一个参数 第二个参数

如果有帮助,这里有一个 getopt/shift 示例:

而getopts a:bc OPT;做 案例“$OPT”在 '一种') 添加=1 ADD_OPT="$OPTARG" ;; 'b') 散装=1 ;; 'C') 检查=1 ;; 经社理事会 完毕 班次 $( expr $OPTIND - 1 ) 文件="$1"

【讨论】:

  • 你可能想要$# -ne 0而不是"$*" != ""
  • 在某些情况下不需要使用whileshift。您可以使用for argfor arg in "$@"
【解决方案3】:

一般来说,为了安全起见,当 Bash 解释代码时,整个给定字符串都用于变量名,您需要将其括在大括号中:${10}

【讨论】:

    猜你喜欢
    • 2013-03-17
    • 2017-06-12
    • 1970-01-01
    • 2014-09-05
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多