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โดยทั่วไปถือว่าอันตรายเกินไปที่จะใช้ในกรณีส่วนใหญ่