Вы сказали bash
, поэтому давайте сделаем все это с помощью встроенных команд оболочки:
$ inp="cop1010 ADD atra522,Allison Track,CT,canada"
$ IFS=, fields=($inp)
$ echo ${fields[0]}
cop1010 ADD atra522
$ echo ${fields[1]}
Allison Track
$ echo ${fields[2]}
CT
$ echo ${fields[3]}
canada
$ IFS=\ cmd=(${fields[0]})
$ echo ${cmd[0]}
cop1010
$ echo ${cmd[1]}
ADD
$ echo ${cmd[2]}
atra522
$
Вы можете установить их все как переменные (вместо того, чтобы повторять их), и никогда не нужно создавать подоболочку для запуска awk
, cut
или любого другого инструмента.
$ declare -p > my_environment
Позже, внутри barscript
:
. my_environment
declare -p
выводит переменные окружения в форме, которая может быть выполнена оболочкой, включая кавычки и экранирование переменных по мере необходимости.
$ foobar='"some double-quoted text"'
$ echo $foobar
"some double-quoted text"
$ declare -p foobar
declare -- foobar="\"some double-quoted text\""
BTW, если вы не хотите выводить все ваше окружение, это не обязательно. Просто назовите переменные, которые вы хотите вывести, в командной строке declare -p
:
$ declare -p HOME PATH foobar
declare -x HOME="/home/cas"
declare -x PATH="/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11"
declare -- foobar="\"double-quoted-text\""
или передайте через grep -v
, чтобы исключить определенные переменные, которые вы не хотите видеть в выводе.
Чтобы получить только экспортированные переменные:
declare -p -x > my_environment
Для получения дополнительной информации смотрите help declare
в bash
.