Portál AbcLinuxu, 14. května 2025 23:09
#!/bin/bash ARR=() cat /def/$FILE | while read LINE do ARR+=("$LINE") done echo ${#ARR[*]}
l4m4
- použít přesměrování.
while read LINE do ARR+=("$LINE") done < /def/$FILEPřípadně lze využít i tuto syntaxi:
for LINE in $(< /def/$FILE) do ARR=$((ARR+1)) doneZde ale netuším, zda bash skutečně spouští subshell (ale jen jednou!) nebo zda-li využije přesměrování. Syntaxe spíše napovídá, že se interně spustí
`cat /def/$FILE`
a přesměruje standardní výstup.
for LINE in $(< /def/$FILE) do ARR=$((ARR+1)) doneTo je nějaký nesmysl, to nacpe všechny slova ze souboru do toho for-in bloku a ve výsledku to nedělá to, co má (nečte to po řádcích). Možná jste měl na mysli tuto syntaxi, která je podobná jako ta s pipe, ale je to bez pipe, tudíž se proměnné zachovají:
while read LINE; do ARR=$((ARR+1)) done < <(cat /def/$FILE)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.