19

在 shell 中,我们有命令 shift,但我在一些例子中看到它给出 shift 3

为什么班次后有数字?它是关于什么的?它能做什么 ?

例子:

echo “arg1= $1  arg2=$2 arg3=$3”
shift
echo “arg1= $1  arg2=$2 arg3=$3”
shift   
echo “arg1= $1  arg2=$2 arg3=$3”
shift  
echo “arg1= $1  arg2=$2 arg3=$3”
shift

输出将是:

arg1= 1 arg2=2  arg3=3 
arg1= 2 arg2=3  arg3= 
arg1= 3 arg2=   arg3=
arg1=   arg2=   arg3=

但是当我添加它时,它无法正确显示。

4

5 回答 5

49

看一下手册页,上面写着:

shift [n]
    The  positional parameters from n+1 ... are renamed to $1 .... 
    If n is not given, it is assumed to be 1.

示例脚本:

#!/bin/bash
echo "Input: $@"
shift 3
echo "After shift: $@"

运行:

$ myscript.sh one two three four five six

Input: one two three four five six
After shift: four five six

这表明在移位 3 后$1=four$2=five$3=six

于 2012-05-02T13:11:02.353 回答
2

man bash用来查找shift内置命令:

班次 [n]

从 n+1 ... 开始的位置参数被重命名为 $1 ...。由数字 $# 到 $#-n+1 表示的参数未设置。n 必须是小于或等于 $# 的非负数。如果 n 为 0,则不更改任何参数。如果 n 未给出,则假定为 1。如果 n 大于 $#,则位置参数不变。如果 n 大于 $# 或小于零,则返回状态大于零;否则为 0。

于 2012-05-02T13:13:33.860 回答
1

只需阅读Bash 手册或键入以下内容即可回答此问题man shift

      shift [n]

将位置参数向左移动 n。n+1 ... $# 中的位置参数重命名为 $1 ... $#-n。由数字 $# 到 $#-n+1 表示的参数未设置。n 必须是小于或等于 $# 的非负数。如果 n 为零或大于 $#,则位置参数不会更改。如果未提供 n,则假定为 1。除非 n 大于 $# 或小于零,否则返回状态为零,否则为非零。

于 2012-05-02T13:11:09.890 回答
0

将位置参数向左移动 n。n+1 ... $# 中的位置参数重命名为 $1 ... $#-n。由数字 $# 到 $#-n+1 表示的参数未设置。n 必须是小于或等于 $# 的非负数。如果 n 为零或大于 $#,则位置参数不会更改。如果未提供 n,则假定为 1。除非 n 大于 $# 或小于零,否则返回状态为零,否则为非零。

  1. 项目清单
于 2013-12-19T04:14:22.067 回答
0

shift将命令行参数视为 FIFO 队列,每次调用时都会弹出元素。

array = [a, b, c]
shift equivalent to
array.popleft
[b, c]
$1, $2,$3 can be interpreted as index of the array.

bash - 与重新分配值相比,移位的优势很简单 - 代码日志

于 2018-04-11T15:20:45.697 回答