web-dev-qa-db-ja.com

シェルシフト手順-これは何ですか?

シェルにはコマンドシフトがありますが、シフト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=

しかし、それを追加すると、正しく表示されません。

19
user1253622

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

47
dogbane

あなたが使う man bash組み込みコマンドshiftを見つけるには:

シフト[n]

N + 1 ...の位置パラメータは、$ 1 ...に名前が変更されます。$#から$#-n + 1までの数字で表されるパラメータは設定解除されます。 nは、$#以下の非負数でなければなりません。 nが0の場合、パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きい場合、位置パラメータは変更されません。 nが$#より大きいか、ゼロより小さい場合、戻りステータスはゼロより大きくなります。それ以外の場合は0。

2
Zava

これは、単に Bash manual を読むか、man shift

      shift [n]

位置パラメータをnだけ左にシフトします。 n + 1 ... $#の位置パラメータは、$ 1 ... $#-nに名前が変更されます。 $#から$#-n + 1の数字で表されるパラメーターは設定されていません。 nは、$#以下の非負数でなければなりません。 nがゼロまたは$#より大きい場合、位置パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きいかゼロ未満でない限り、戻りステータスはゼロです。それ以外の場合はゼロ以外です。

1

位置パラメータをnだけ左にシフトします。 n + 1 ... $#の位置パラメータは、$ 1 ... $#-nに名前が変更されます。 $#から$#-n + 1の数字で表されるパラメーターは設定されていません。 nは、$#以下の非負数でなければなりません。 nがゼロまたは$#より大きい場合、位置パラメーターは変更されません。 nが指定されていない場合、1と見なされます。nが$#より大きいかゼロ未満でない限り、戻りステータスはゼロです。それ以外の場合はゼロ以外です。

  1. リストアイテム
0
kalyan varma

shiftは、コマンドライン引数をFIFOキューとして扱い、呼び出されるたびに要素をポップレフトします。

array = [a, b, c]
shift equivalent to
array.popleft
[b, c]
$1, $2,$3 can be interpreted as index of the array.

bash-値の再割り当てに対するシフトの利点-スタックオーバーフロー

0
Algebra