2012-05-02 79 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. 列表項