问题
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.
回答1:
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
.
回答2:
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.
回答3:
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.
回答4:
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.
- List item
回答5:
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
来源:https://stackoverflow.com/questions/10414391/shell-shift-procedure-what-is-this