2012-05-02 15 views
16

Trong trình bao, chúng tôi có lệnh dịch chuyển, nhưng tôi đã thấy trên một số ví dụ về sự dịch chuyển của nó 3Quy trình dịch chuyển Shell - Đây là gì?

Tại sao có một số sau khi dịch chuyển? và những gì về nó? Những gì nó làm ?

Ví dụ:

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 

Kết quả sẽ là:

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

Nhưng khi tôi nói thêm rằng, nó không hiển thị một cách chính xác.

+0

sản lượng gì bạn nhận được? –

+0

Xem câu trả lời bên dưới. 'shift 3' về cơ bản giống như' shift; thay đổi; shift'. –

Trả lời

43

Hãy xem trang man, mà nói:

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

Một kịch bản Ví dụ:

#!/bin/bash 
echo "Input: [email protected]" 
shift 3 
echo "After shift: [email protected]" 

Run nó:

$ myscript.sh one two three four five six 

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

Điều này cho thấy phục hồi sau nương bởi 3 , $1=four, $2=five$3=six.

1

này sẽ được trả lời chỉ đơn giản bằng cách đọc một trong hai Bash manual, hoặc gõ man shift:

 shift [n] 

phím Shift các tham số vị trí bên trái của n. Các tham số vị trí từ n + 1 ... $ # được đổi tên thành $ 1 ... $ # - n. Tham số được biểu thị bằng các số $ # đến $ # - n + 1 không được đặt. n phải là số không âm ít hơn hoặc bằng $ #. Nếu n bằng 0 hoặc lớn hơn hơn $ #, các thông số vị trí không thay đổi. Nếu n không phải là được cung cấp, nó được giả định là 1. Trạng thái trả về bằng không trừ khi n là lớn hơn $ # hoặc nhỏ hơn 0, khác không.

+1

Không chắc chắn lý do tại sao, nhưng tôi không có mục nhập thủ công để thay đổi. Có lẽ nó phụ thuộc vào distro, nhưng bash manual cũng có nó. – iyrin

2

bạn sử dụng man bash để tìm shift lệnh dựng sẵn:

thay đổi [n]

Các tham số vị trí từ n + 1 ... được đổi tên thành $ 1 .... thông số được biểu thị bằng các con số $ # xuống còn $ # - n + 1 là chưa được đặt. n phải là số không âm ít hơn hoặc bằng $ #. Nếu n là 0, không có tham số nào được thay đổi. Nếu không được đưa ra, được giả định là 1. Nếu n lớn hơn $ #, các tham số vị trí không thay đổi. Trạng thái trả lại lớn hơn số không nếu n lớn hơn $ # hoặc nhỏ hơn 0; nếu không 0.

0

Chuyển các thông số vị trí sang trái bằng n. Các tham số vị trí từ n + 1 ... $ # được đổi tên thành $ 1 ... $ # - n. Các tham số được biểu thị bằng các số $ # đến $ # - n + 1 không được đặt. n phải là số không âm ít hơn hoặc bằng $ #. Nếu n bằng 0 hoặc lớn hơn $ #, các thông số vị trí không thay đổi. Nếu n không được cung cấp, nó được giả định là 1.Trạng thái trả về là số không trừ khi n lớn hơn $ # hoặc nhỏ hơn 0, khác không.

  1. List item