2017-09-14 8 views
1

私は、このようなラインをお読みください。bashスクリプトの配列名の前には何がありますか?

arrayA=$((${#arrayB[@]}+${#arrayC[@]})); 

それは何をしますか?特に配列名の前には#という意味がありますか?

+5

'$ {#[@]}' '配列A'における要素の数に展開。リファレンスマニュアルの[_Shell Parameter Expansion_セクション](https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion) –

+0

ありがとう@gniourf_gniourf、この行は何ですか全体の中で?私は2つの配列を使ってターミナルでrhsを実行しようとしましたが、結果をコマンドとして実行しようとしていますか?これは私に意味をなさない... –

+0

'$((...))'は算術コンテキストです。 '$ {#arrayB [@]}'と '$ {#arrayC [@]}'はそれぞれ 'arrayB'と' arrayC'の要素の数に展開されます。したがって、 '$ {($ {#arrayB [@]} + $ {#arrayC [@]}))'は 'arrayB'と' arrayC'の要素数の合計に展開されます。それを 'echo $(($ {#arrayB [@]} + $ {#arrayC [@]}))'でチェックしてください。したがって、あなたのスニペットは 'arrayB'と' arrayC'の要素数の合計を 'arrayA'変数に代入します。 –

答えて

5

${#a[@]}の数に展開する長さの和+を持った算術拡張構文であります配列内の要素a。 Shell Parameter Expansion section of the reference manualを参照してください。

ありがとう@gniourf_gniourf、この行は全体的に何ですか?私は2つの配列を使ってターミナルでrhsを実行しようとしましたが、結果をコマンドとして実行しようとしていますか?これは

  • $((...))arithmetic contextです...私には意味がありません。
  • ${#arrayB[@]}および${#arrayC[@]}は、それぞれarrayBおよびarrayCの要素の数に拡張されます。
  • $((${#arrayB[@]}+${#arrayC[@]}))は、arrayBとの要素数の合計に拡張されます。それをecho $((${#arrayB[@]}+${#arrayC[@]}))で確認してください。
  • スニペットは、変数arrayAに、arrayBarrayCの要素数の合計を割り当てます。

デモ:

$ arrayB=(one two three) 
$ arrayC=(alpha beta gamma delta) 
$ echo "${#arrayB[@]}" 
3 
$ echo "${#arrayC[@]}" 
4 
$ echo "$((${#arrayB[@]} + ${#arrayC[@]}))" 
7 
$ arrayA=$((${#arrayB[@]} + ${#arrayC[@]})) 
$ echo "$arrayA" 
7 
1

ライン:

arrayA=$((${#arrayB[@]}+${#arrayC[@]})); 

読み込み:set the value of variable arrayA as the summed length of arrayB and arrayC

$(())は、2つの配列が${#array[@]}

関連する問題