壳牌换班程序 - 这是什么?

时间:2012-05-02 13:07:08

标签: linux shell shift

在shell中我们有命令移位,但我在一些例子中看到它给出了移位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=

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

5 个答案:

答案 0 :(得分:46)

查看man页面,其中显示:

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

答案 1 :(得分:2)

您使用man bash查找shift内置命令:

  

shift [n]

     

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

答案 2 :(得分:1)

只需阅读Bash manual或输入man shift即可回答:

      shift [n]
     

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

答案 3 :(得分:0)

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

  1. 列表项

答案 4 :(得分:0)

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

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

bash - The advantage of shift over reassign value straightforward - Stack Overflow