【发布时间】: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 $@
【问题讨论】:
我有一个自定义命令,我创建调用 PUSH
我要跑步
PUSH #1 #2 #3 #4
我想动态访问我的所有参数,我似乎很难。我该如何正确地做到这一点?
我要访问
#1 #2 #3 #4
我知道我不能使用 $1、$2、$3 或 $4。
我试过了
PUSH a b c | echo $@
【问题讨论】:
$ 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 之外的其他事情。
【讨论】:
"$@".
for a in ${@} 时,你会得到 ./yourscript "argument one" "argument two" 打印 argument, one, argument, two 而不是 @987654333 @ 和 argument two。引用真的很重要。
我认为你在做正确的事,但你测试的方式
语法不对。 $@ 将允许您访问传递给您的参数
脚本,但是您的命令 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
【讨论】:
"$@".