【问题标题】:What does this line mean: lib=$1; shift这行是什么意思:lib=$1;转移
【发布时间】:2014-09-23 20:06:47
【问题描述】:

我正在查看一个 shell 脚本。这两行是做什么的?

lib=$1
shift

非常感谢。

【问题讨论】:

  • 在本网站寻求帮助之前,您通常会花费一些自己的精力来尝试寻找解决方案。
  • 给出的两行相当于lib=$1; shift,而不是lib=$1 shift——分号有所不同。

标签: shell unix


【解决方案1】:

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=

【讨论】:

  • 感谢您的回答。我创建了一个名为 shell.sh 的文件并将您的命令行复制到该文件中。然后我测试了两个命令:sh shell.sh 1 2,它向我展示了你的输出。我建议使用命令进行另一次测试:sh shell.sh 1 2 3 4。它解释了什么转变做得很好。
  • 更新了第二个例子。如果有帮助,请考虑将其标记为答案,以帮助有相同问题的其他人。
  • “遍历”? “弹出第一个项目”可能更准确。不必进行任何遍历——例如,如果$@ 存储为链表,则可以通过仅更改该列表的头指针来执行shift,而无需遍历。
  • 我想不出合适的术语,所以我使用了手册页描述中给出的术语。
猜你喜欢
  • 2019-04-24
  • 1970-01-01
  • 2012-12-26
  • 2021-05-25
  • 2017-06-30
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多