【发布时间】:2014-09-23 20:06:47
【问题描述】:
我正在查看一个 shell 脚本。这两行是做什么的?
lib=$1
shift
非常感谢。
【问题讨论】:
-
在本网站寻求帮助之前,您通常会花费一些自己的精力来尝试寻找解决方案。
-
给出的两行相当于
lib=$1; shift,而不是lib=$1 shift——分号有所不同。
我正在查看一个 shell 脚本。这两行是做什么的?
lib=$1
shift
非常感谢。
【问题讨论】:
lib=$1; shift,而不是lib=$1 shift——分号有所不同。
shift 遍历 shell 的参数列表。对于shift,请参阅man page。
所以在这两行之后,lib=$2。
一个更清晰的例子:
echo “arg1= $1 arg2=$2”
shift
echo “arg1= $1 arg2=$2”
shift
echo “arg1= $1 arg2=$2”
shift
输出:
arg1= 1 arg2=2
arg1= 2 arg2=
arg1= arg2=
示例 2:
echo “arg1= $1 arg2=$2 arg3=$3 arg4=$4”
shift
echo “arg1= $1 arg2=$2 arg3=$3 arg4=$4”
shift
echo “arg1= $1 arg2=$2 arg3=$3 arg4=$4”
shift
echo “arg1= $1 arg2=$2 arg3=$3 arg4=$4”
shift
echo “arg1= $1 arg2=$2 arg3=$3 arg4=$4”
shift
输出:
arg1=1 arg2=2 arg3=3 arg4=4
arg1=2 arg2=3 arg3=4 arg4=
arg1=3 arg2=4 arg3= arg4=
arg1=4 arg2= arg3= arg4=
arg1= arg2= arg3= arg4=
【讨论】:
sh shell.sh 1 2,它向我展示了你的输出。我建议使用命令进行另一次测试:sh shell.sh 1 2 3 4。它解释了什么转变做得很好。
$@ 存储为链表,则可以通过仅更改该列表的头指针来执行shift,而无需遍历。