SORU
26 AĞUSTOS 2009, ÇARŞAMBA


Nasıl bash bir dizi dilime

(cevap sığdırmak için düzenlenmiş)

"Bash(1) man sayfası, bash dizi bir dilim. bir yolunu bulamadım" bölüm Dizi

Yukarı aşırı karmaşık bu fonksiyon ile geldim:

#!/bin/bash

# @brief: slice a bash array
# @arg1:  output-name
# @arg2:  input-name
# @args:  seq args
# ----------------------------------------------
function slice() {
   local output=$1
   local input=$2
   shift 2
   local indexes=$(seq $*)

   local -i i
   local tmp=$(for i in $indexes 
                 do echo "$(eval echo \"\${$input[$i]}\")" 
               done)

   local IFS=$'\n'
   eval $output="( \$tmp )"
}

Eskiden bu gibi:

$ A=( foo bar "a  b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}"  # bar
$ echo "${B[1]}"  # a  b c

Daha iyi bir yolu var mı?

CEVAP
26 AĞUSTOS 2009, ÇARŞAMBA


Bash Parametre Genişleme bölümü man sayfasına bakın. Dizinin içeriğini döndürür, ":1:2" uzunlukta bir dilim Endeksi 1'den başlayarak 2 alır.

A=( foo bar "a  b c" 42 )
B=("${A[@]:1:2}")
echo "${B[@]}"    # bar a  b c
echo "${B[1]}"    # a  b c

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andytokkallos

    Andytokkallo

    27 Kasım 2007
  • filmurfreakur

    filmurfreaku

    29 Mart 2007
  • Palmundo Ec

    Palmundo Ec

    11 HAZİRAN 2009