【问题标题】:Access all the provide parameters and print them in bash [duplicate]访问所有提供的参数并在 bash 中打印它们 [重复]
【发布时间】:2018-08-11 19:11:37
【问题描述】:

我有一个自定义命令,我创建调用 PUSH

我要跑步

PUSH #1 #2 #3 #4

我想动态访问我的所有参数,我似乎很难。我该如何正确地做到这一点?

我要访问

#1 #2 #3 #4

我知道我不能使用 $1、$2、$3 或 $4。

我试过了

PUSH a b c | echo $@

【问题讨论】:

    标签: bash unix


    【解决方案1】:
    $ cat args.sh
    #!/bin/bash
    
    echo ${@}
    
    for a in "${@}"; do
        echo ${a}
    done
    
    $ bash args.sh foo bar baz
    foo bar baz
    foo
    bar
    baz
    

    $@ 让您走在正确的轨道上。您可以一次访问所有参数(我的第一个 echo),也可以使用循环(我的 for),因为我假设您最终会想要在真实脚本中做除 echo 之外的其他事情。

    【讨论】:

    • 总是双引号 "$@".
    • 继续 rici 上面所说的 -- 当你说 for a in ${@} 时,你会得到 ./yourscript "argument one" "argument two" 打印 argument, one, argument, two 而不是 @987654333 @ 和 argument two。引用真的很重要。
    • 很好,谢谢。我做了足够多的 shell,我记得这个 after 我有点,但还不够我以前想到它。答案已更新。
    【解决方案2】:

    我认为你在做正确的事,但你测试的方式 语法不对。 $@ 将允许您访问传递给您的参数 脚本,但是您的命令 PUSH #1 #2 #3 #4 | echo $2 有两个问题。第一的 首先,第一个 octothorpe 是开始一行注释。你正在运行PUSH 接下来是 bash 评论,#1 #2...。其次,在这个命令的范围内, $@ 将引用传递给此 shell 会话的参数,而不是 参数传递到它之前的命令中。要正确测试此语法,您 需要在脚本本身中使用它,像这样:

    - ❯❯❯ cat push.sh
    #!/bin/bash
    
    echo $@
    - ❯❯❯ ./push.sh one two three
    one two three
    

    或者更简洁,

    - ❯❯❯ bash -c 'echo $@' here are some args
    are some args
    

    【讨论】:

    • 总是双引号 "$@".
    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2013-06-21
    • 2011-11-02
    • 2017-01-28
    • 1970-01-01
    • 2023-03-23
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多