Bash:位置パラメーターのスライス


19

$@最初にすべての位置パラメータをこのような別の配列にコピーすることなく、Bashのスライスを取得するにはどうすればよいですか?

argv=( "$@" )
echo "${argv[@]:2}";

1
常に引用します"$@"。あなたのargv任意の引数にスペースが含まれている場合は割り当てが壊れます。
ヨルダン

回答:


31

他の配列と同じ形式を使用できます。から2番目と3番目の要素を抽出するには$@、次のようにします。

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
しかし、これはv4.1.2で文字単位で機能するようですが、単語単位でそれを行う方法はありますか?
アレクセイマグラ

@AlexejMagura私はあなたの言うことを理解していません。それは配列の要素に作用します。1文字の要素がある場合、「文字上」で機能します。各要素が単語の場合、単語に対して機能します。あなたはおそらく配列ではなく文字列でこれを試していますか?
テルドン

「$ @」のコピーで試していますが、その時点で文字列になる可能性があると思いますが、わかりません。
アレクセイマグラ

bash 4.2.46では、"${@:1:2}"実際に1番目2番目の コマンドライン引数が返されます。一方、"${@:1}"私に与え、完全なコマンドライン引数を、そして"${@:0}"私に与え、完全なコマンドライン引数が続くスクリプト名を
Rockallite

@Rockalliteええ、はい。$@ 配列の2番目と3番目の要素は、1番目と2番目の引数です。"${@:1}"2番目の要素(1番目の引数)で${@:0}始まる配列全体と、スクリプトの名前である1番目の要素から始まる配列全体を出力します。何を期待していましたか?
テルドン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.