我是新手Linux用户,我遇到了这个问题。
如果执行了以下命令
set 10 20 30 40 50
shift
shift
我如何找到$*
的价值?
答案 0 :(得分:2)
找到$*
的值的最简单方法是回应它:
echo $*
鉴于显示的三个步骤,它将回显:
30 40 50
没有引号的$*
的值与没有引号的$@
的值相同,并且包含shell脚本的所有位置参数或{{1}设置的值}命令,例如您显示的命令(由任何后续set
命令修改)。使用双引号,shift
表示包含所有位置参数的单个字符串,但"$*"
表示多个字符串,每个字符串与位置参数相同。这种形式更常见。
您可以使用"$@"
命令查看这些表单之间的区别:
printf
如果您使用了以下内容,您可以更深入地了解它们:
printf "%s\n" $*
printf "%s\n" "$*"
printf "%s\n" $@
printf "%s\n" "$@"
没有任何转变,然后使用4 set -- 10 '20 30' ' 40 50 '
命令:
printf
X用于标记打印值的开始和结束。输出是:
printf "X%sX\n" $*
printf "X%sX\n" "$*"
printf "X%sX\n" $@
printf "X%sX\n" "$@"
Bash手册的相关部分为special parameters。
答案 1 :(得分:0)
来自bash
手册页:
set
:任何 处理选项后剩余的参数将被处理 作为位置参数的值,并在中分配 订购,$1
,$2
,...$n
。
和
shift [n]
:n+1 ...
的位置参数重命名为$1 ....
由$#
到$#-n+1
的数字表示的参数是 未设置...如果没有给出n
, 假设为1。
所以你的set
设置:
$1 = 10
$2 = 20
$3 = 30
$4 = 40
$5 = 50
然后shift
命令抛出$1
并将其他$n
变量拖一。你做了两次,这样你就得到了:
$1 = 30
$2 = 40
$3 = 50
您可以使用:echo $*
查看输出:
30 40 50
答案 2 :(得分:0)
它有点奇怪......问题是,$ *的价值......好吧,它代表了放入命令的所有东西,因此传递给了位置参数。
shift命令只会将原始命令行中的所有内容推到一个位置....所以从10 20 30 40 50 .....两个sahifts后(2次向左推)你有30 40 50现在可以通过使用$ $ $ 2 ... $ 2
指定它们的位置/出现来访问$ set 10 20 30 40 50
$ shift 2
$ echo $*
30 40 50
简单地说....
如果你想访问个别价值....只需使用$ 1,$ 2 ....就像明智一样,这里$ 1将有30,$ 2将有40。
你想知道你使用了多少参数$#
$ echo $#
3
这有帮助吗?