变量$ *的值

时间:2013-07-20 05:00:56

标签: linux wildcard

我是新手Linux用户,我遇到了这个问题。

如果执行了以下命令

set 10 20 30 40 50
shift
shift 

我如何找到$*的价值?

3 个答案:

答案 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

这有帮助吗?