Вам также необходимо удалить все перед пробелом:
j=${j//* /''}
''
не требуется.
j=${j//* /}
*
соответствует любому количеству любых символов,Так что если у j
есть два пробела, то он удалит все перед и включая второй пробел. В зависимости от ваших потребностей может быть лучше использовать:
j=${j##* }
или
j=${j#* }
См. Расширение параметров оболочки в bash .
Itможет быть лучше прочитать переменную в массиве и затем обработать ее:
sample_variable='1 ABCD;2 EFGH;3 IJKL;4 MNOP;5 QRST;'
IFS=';' read -r -a arr <<<"$sample_variable"
Затем вы можете разделить переменную, игнорируя все перед первым пробелом:
for j in "${arr[@]}"; do
j=${j//* /}
echo "$j"
done
Но япросто сделает следующее, но он оставит одну пустую завершающую новую строку, поэтому может потребоваться sed '$d'
- удалить последнюю строку:
<<<"$sample_variable" tr ';' '\n' | cut -d' ' -f2- | sed '$d'
Примечания:
j=$j | cut -d ' ' -f3-
не делает то, что вы думаете, что делает. Он выполняет j=$j
, который устанавливает переменную для себя. Затем он выполняет cut -d ' ' -f3-
без ввода, потому что присвоение не печатает никакого вывода. - Не забывайте всегда заключать в кавычки ваши расширения переменных.