Portál AbcLinuxu, 9. května 2025 21:34
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" doneAk to chces cez cislo argumentu, tak potrebujes nepriame odkazovanie
for ((i=1; i<$#; i++)); do echo "argument cislo $i: ${!i}" doneAk 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.