0

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

如果执行了以下命令

set 10 20 30 40 50
shift
shift 

我如何找到 的价值$*

4

3 回答 3

2

找到 的值的最简单方法$*是回显它:

echo $*

鉴于显示的三个步骤,它将回显:

30 40 50

不带引号的值与$*不带引号的值相同$@,并且由 shell 脚本的所有位置参数或由set命令设置的值组成,例如您显示的命令(由任何后续shift命令修改)。用双引号括起来,"$*"表示包含所有位置参数的单个字符串,但"$@"表示多个字符串,每个字符串都与一个位置参数相同。它是更常见的正确形式。

printf您可以使用以下命令查看这些形式之间的区别:

printf "%s\n"  $*
printf "%s\n" "$*"
printf "%s\n"  $@
printf "%s\n" "$@"

如果您使用以下方法,您会更深入地了解它们:

set -- 10 '20 30' '  40  50  '

没有任何班次,然后使用了 4 个printf命令:

printf "X%sX\n"  $*
printf "X%sX\n" "$*"
printf "X%sX\n"  $@
printf "X%sX\n" "$@"

X 用于标记打印值的开始和结束。输出是:

X10X
X20X
X30X
X40X
X50X
X10 20 30   40  50  X
X10X
X20X
X30X
X40X
X50X
X10X
X20 30X
X  40  50  X

Bash 手册的相关部分是特殊参数

于 2013-07-20T05:25:52.903 回答
0

bash手册页:

set: 处理选项后剩余的任何参数都被视为位置参数的值,并按顺序分配给$1, $2, ... $n

和:

shift [n]:位置参数 fromn+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
于 2013-07-20T05:18:43.137 回答
0

它有点奇怪......问题说,$ * 的值......嗯,它代表了放入命令中的所有内容,因此被传递到位置参数上。

shift 命令只会将原始命令行中的所有内容向左推一个位置 .... 所以从 10 20 30 40 50 ..... 在两次 sahifts 之后(向左推 2 次)你有 30 40 50现在可以通过使用 $ 像 $1 ... $2 指定它们的位置/出现来访问它

$ set 10 20 30 40 50
$ shift 2
$ echo $*
30 40 50

简而言之 ....

如果您想访问单个值 .... 只需使用 $1 , $2 .... 同样明智的是,这里 $1 将有 30,$2 将有 40。

你想知道你有多少参数使用 $#

$ echo $#
 3

这有帮助吗?

于 2013-07-20T05:23:22.590 回答