Varibles - Union [ซ้ำ]

Sep 02 2020
FICH10=primero.sh
FICH20=segundo.sh

for i in 10 20
do
   echo $FICH($i)  # I want resolved first $i and then resolver var FICH10
done

ฉันต้องการให้มันแก้ปัญหา$iและเชื่อมต่อกับFICHชายฝั่งก่อนแล้วจึงส่งคืนค่าของ$FICH10หรือ$FICH20แต่โดยไม่ต้องใส่ตัวเลข แต่จะได้รับการแก้ไขโดยลูป

ฉันไม่ได้แก้ไขด้วยการตอบสนอง

$ for i in 10 20
> do
> echo $((FICH$i))
> done
ksh: line 3: primero: parameter not set

คำตอบ

3 choroba Sep 02 2020 at 20:27

ใช้ตัวแปรทิศทาง:

#!/bin/bash
fich10=primero.sh
fich20=segundo.sh

for i in 10 20 ; do
    var=fich$i
    echo ${!var}
done

หมายเหตุฉันใช้ตัวพิมพ์เล็กสำหรับชื่อตัวแปรเนื่องจากไม่ใช่ตัวแปรระบบ

2 glennjackman Sep 02 2020 at 20:43

ด้วย bash เวอร์ชัน 4.3+ คุณสามารถใช้ "nameref":

for i in 10 20; do
    declare -n var="FICH$i"
    echo "$var"
done

เราสามารถใช้evalบังคับให้มีการแทนที่ตัวแปรรอบที่สองได้ แต่อย่างที่คุณเห็นไม่จำเป็น evalโดยทั่วไปถือว่าอันตรายเกินไปที่จะใช้ในกรณีส่วนใหญ่