シェルにはコマンドシフトがありますが、シフト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=
しかし、それを追加すると、正しく表示されません。
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
。
あなたが使う man bash
組み込みコマンドshift
を見つけるには:
シフト[n]
N + 1 ...の位置パラメータは、$ 1 ...に名前が変更されます。$#から$#-n + 1までの数字で表されるパラメータは設定解除されます。 nは、$#以下の非負数でなければなりません。 nが0の場合、パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きい場合、位置パラメータは変更されません。 nが$#より大きいか、ゼロより小さい場合、戻りステータスはゼロより大きくなります。それ以外の場合は0。
これは、単に Bash manual を読むか、man shift
:
shift [n]
位置パラメータをnだけ左にシフトします。 n + 1 ... $#の位置パラメータは、$ 1 ... $#-nに名前が変更されます。 $#から$#-n + 1の数字で表されるパラメーターは設定されていません。 nは、$#以下の非負数でなければなりません。 nがゼロまたは$#より大きい場合、位置パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きいかゼロ未満でない限り、戻りステータスはゼロです。それ以外の場合はゼロ以外です。
位置パラメータをnだけ左にシフトします。 n + 1 ... $#の位置パラメータは、$ 1 ... $#-nに名前が変更されます。 $#から$#-n + 1の数字で表されるパラメーターは設定されていません。 nは、$#以下の非負数でなければなりません。 nがゼロまたは$#より大きい場合、位置パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きいかゼロ未満でない限り、戻りステータスはゼロです。それ以外の場合はゼロ以外です。
shift
は、コマンドライン引数をFIFOキューとして扱い、呼び出されるたびに要素をポップレフトします。
array = [a, b, c]
shift equivalent to
array.popleft
[b, c]
$1, $2,$3 can be interpreted as index of the array.