Shell shift procedure - What is this?

2019-03-14 14:49发布

In shell we have the command shift, but i saw on some example its giving shift 3

Why there is a number after shift ? and what its about ? what it does ?

Example:

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

The output will be:

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

But when i add that, it doesn't display it correctly.

5条回答
我只想做你的唯一
2楼-- · 2019-03-14 15:32

Shift the positional parameters to the left by n. The positional parameters from n+1 ... $# are renamed to $1 ... $#-n. Parameters represented by the numbers $# to $#-n+1 are unset. n must be a non-negative number less than or equal to $#. If n is zero or greater than $#, the positional parameters are not changed. If n is not supplied, it is assumed to be 1. The return status is zero unless n is greater than $# or less than zero, non-zero otherwise.

  1. List item
查看更多
你好瞎i
3楼-- · 2019-03-14 15:35

shift treat command line arguments as a FIFO queue, it popleft element every time it's invoked.

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

查看更多
Fickle 薄情
4楼-- · 2019-03-14 15:39

Take a look at the man page, which says:

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

An Example script:

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

Run it:

$ myscript.sh one two three four five six

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

This shows that after shifting by 3, $1=four, $2=five and $3=six.

查看更多
相关推荐>>
5楼-- · 2019-03-14 15:40

This would be answered simply by reading either the Bash manual, or typing man shift:

      shift [n]

Shift the positional parameters to the left by n. The positional parameters from n+1 ... $# are renamed to $1 ... $#-n. Parameters represented by the numbers $# to $#-n+1 are unset. n must be a non-negative number less than or equal to $#. If n is zero or greater than $#, the positional parameters are not changed. If n is not supplied, it is assumed to be 1. The return status is zero unless n is greater than $# or less than zero, non-zero otherwise.

查看更多
叼着烟拽天下
6楼-- · 2019-03-14 15:46

you use man bash to find the shift builtin command:

shift [n]

The positional parameters from n+1 ... are renamed to $1 .... Parameters represented by the numbers $# down to $#-n+1 are unset. n must be a non-negative number less than or equal to $#. If n is 0, no parameters are changed. If n is not given, it is assumed to be 1. If n is greater than $#, the positional parameters are not changed. The return status is greater than zero if n is greater than $# or less than zero; otherwise 0.

查看更多
登录 后发表回答