19

シェルにはコマンドシフトがありますが、いくつかの例でシフト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=

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

4

5 に答える 5

49

マニュアルページを見てください。

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

$1=fourこれは、3 、、、$2=fiveおよび。だけシフトした後であることを示してい$3=sixます。

于 2012-05-02T13:11:02.353 に答える
2

組み込みコマンドman bashを見つけるために使用します。shift

シフト [n]

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

于 2012-05-02T13:13:33.860 に答える
1

これは、 Bashのマニュアルを読むか、次のように入力するだけで答えられますman shift

      shift [n]

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

于 2012-05-02T13:11:09.890 に答える