在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 :(得分:46)
查看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: $@"
shift 3
echo "After shift: $@"
运行它:
$ 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 :(得分:2)
您使用man bash
查找shift
内置命令:
shift [n]
来自n + 1 ...的位置参数被重命名为$ 1 .... 由数字$#表示的参数表示为$# - n + 1 未设置。 n必须是小于或等于的非负数 $#。如果n为0,则不更改任何参数。如果没有给出n, 假设为1.如果n大于$#,则为位置 参数不会改变。返回状态大于 如果n大于$#或小于零,则为零;否则为0。
答案 2 :(得分:1)
只需阅读Bash manual或输入man shift
即可回答:
shift [n]
将位置参数向左移动n。位置 来自n + 1 ... $#的参数被重命名为$ 1 ... $# - n。参数 由$#到$# - n + 1的数字表示未设置。 n必须是 非负数小于或等于$#。如果n为零或更大 比$#,位置参数不会改变。如果n不是 如果提供,则假定为1.除非n为,否则返回状态为零 大于$#或小于零,否则为非零。
答案 3 :(得分:0)
将位置参数向左移动n。来自n + 1 ... $#的位置参数被重命名为$ 1 ... $# - n。由$#到$# - n + 1的数字表示的参数未设置。 n必须是小于或等于$#的非负数。如果n为零或大于$#,则不更改位置参数。如果没有提供n,则假定为1.返回状态为零,除非n大于$#或小于零,否则为非零。
答案 4 :(得分:0)
shift
将命令行参数视为FIFO队列,
每次调用时都会显示popleft元素。
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