Я хотел бы иметь возможность разделить код авторизации по -
символ, чтобы я мог работать с каждым сегментом индивидуально. Я не хочу использовать внешние двоичные файлы (awk
, grep
) - это должно быть максимально минималистично. Как я могу этого добиться?
Вот пример кода авторизации:
82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb
Попробуйте использовать Внутренний разделитель полей (IFS
):
AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'
OIFS=$IFS # store old IFS in buffer
IFS='-' # set IFS to '-'
for i in ${AUTH_CODE[@]} # traverse through elements
do
echo $i
done
IFS=$OIFS # reset IFS to default (whitespace)
Вывод:
82a8
bd7d
986d
9dc9
41f5
fc02
2c20
3175
097a
c1eb
Установив внутренний разделитель полей, вы разделите AUTH_CODE
на -
персонаж, позволяющий перемещаться по вновь созданным элементам в foreach
петля.
Вы можете использовать IFS, но это проще:
echo "82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb"- \
| while read -d - i; do echo "$i"; done
Обратите внимание на добавленные -
после строки для разделения - чтение будет игнорировать последний токен, иначе.
Другой способ с сопоставлением с образцом и массивом:
AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'
array=( ${AUTH_CODE//-/ } )
for j in ${array[@]} ; do echo $j ; done
Просто используйте расширение параметров:
AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'
echo "${AUTH_CODE//-/$'\n'}"
Вывод:
82a8
bd7d
986d
9dc9
41f5
fc02
2c20
3175
097a
c1eb
for i in {1..10}; do echo '82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'|cut -d"-" -f$i;done