Twój pierwszy fragment kodu nie przypomina składni powłoki. Jest to poprawna składnia Perla.
Twój drugi fragment nie działa cutpoprawnie; Nie wiem co zamierzałeś.
Powłoka ma wbudowaną konstrukcję rozdzielającą ciąg znaków: gdy piszesz $somevarbez cudzysłowów, powłoka najpierw sprawdza wartość zmiennej somevar, a następnie dzieli tę wartość na osobne słowa na znaki określone przez IFS, a na koniec interpretuje każde słowo jako glob wzorzec (plik wieloznaczny). Możesz podzielić łańcuch, ustawiając IFSznak separatora i tymczasowo wyłączając globowanie.
set -f; IFS=,
arr=($stats)
set +f; unset IFS
Zauważ, że jeśli pole zawiera spacje, element tablicy zachowa tę spację. Jeśli chcesz podzielić wszystkie białe znaki i przecinki, ustaw IFS=', '. Zauważ, że IFSnie jest to ciąg znaków do podziału, ale zestaw znaków do podziału; spacja lub przecinek będą stanowić separator. Ponadto istnieją specjalne zasady dotyczące białych znaków: dowolna sekwencja zerowa lub więcej spacji, po której następuje przecinek, po której następuje zero lub więcej spacji, będzie stanowić jeden separator, a każda sekwencja jednej lub więcej spacji również będzie stanowić separator.
Jeśli chcesz usunąć białe znaki tylko na początku lub na końcu pola, musisz to zrobić element po elemencie.
shopt -s extglob
for ((i=0; i<${#arr[@]}; i++)); do
arr[i]=${arr[i]#+( )} # strip one or more spaces at the beginning
arr[i]=${arr[i]%+( )} # strip one or more spaces at the end
done
awk '{ split("3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720 ",arr,","); print arr[1]; }'LUBecho "3,aac-lc, 93.8, aaclc, 77.3, h.264, 1024.6, h.264, 1029.1, 31, 31, 0,0,0.000000,31,31,0,0,0.000000,7,0,0,0.000000,30,1280 720,10,0,0,0.000000,30,1280 720" | awk '{ split($0,arr,","); print arr[1]; }'To powinno działać.