Portál AbcLinuxu, 8. listopadu 2025 14:55
Ahoj, chtel bych provadet aritmetiku nad argumenty sheelskriptu ($1, $2, ...). Neco ve stylu:
for arg in $(seq $#); do
echo "argument cislo $arg: ${$arg}
done
Bash mi ale rve Bad substitution. Nevite, jak provadet expanzi za nazev promenne? dekuji
for arg in $(seq $@); do echo "argument cislo $arg: $arg" done
hmmm
a kdyz budu chtit skocit o 3 doprava a pak o 2 doleva?
for i; do
# to iste ako for i in *; do
echo "$i"
done
Ak to chces cez cislo argumentu, tak potrebujes nepriame odkazovanie
for ((i=1; i<$#; i++)); do
echo "argument cislo $i: ${!i}"
done
Ak chces najprv robit aritmetiku o tom, ktory argument vlastne chces;
i=2
j=$((i+4))
echo "argument cislo $j: ${!j}"
to je ono!
${!variable}
divne je ze manualova stranka bashe se o teto konstrukci nezminuje.
argCislo=1 for arg in "$@"; do echo "argument cislo: $argCislo je: $arg" let argCislo++ done
Coz ovsem neni v nicem lepsi reseni nez to predchozi, nemluve o tom, ze pointa je jinde :)
Dá se klasicky přes eval:
eval echo "argument cislo $arg: \${$arg}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.