2012-05-02 111 views
16

在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= 

但是,当我添加,它不正确地显示它。

+0

你什么输出? –

+0

查看下面的答案。 “shift 3”与“shift”基本相同;转移; shift'。 –

回答

43

看一看的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: [email protected]" 
shift 3 
echo "After shift: [email protected]" 

运行:

$ 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

这将简单地通过读Bash manual,或键入man shift回答:

 shift [n] 

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

+1

不知道为什么,但我没有手动输入轮班。也许它取决于发行版,但bash手册确实也有。 – iyrin

2

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

移[N]

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

0

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

  1. 列表项