Как изменить переменные

У меня есть следующая переменная:

col=1,3,4, 

Нужно ли в любом случае выбирать числа внутри переменной: (т. Е. 1 3 4 и работать с ними?

Например, выбирая столбец «1», «3» или «4» из .txt файла?

5 Solutions collect form web for “Как изменить переменные”

Нужно ли все-таки выбирать номера переменной: 1 3 4 и работать с ними?

 $ col=1,3,4,; IFS=","; for i in $col; do echo "i= $i"; done i= 1 i= 3 i= 4 

Но изменение внутреннего разделителя полей ( IFS ) может быть опасным как его общесистемная переменная, и многие приложения полагаются на свое значение по умолчанию. Поэтому рекомендуется сохранять и восстанавливать исходное значение каждый раз, когда вам нужно его модифицировать.

 $ col=1,3,4, $ OLDIFS=$IFS $ IFS=","; for i in $col; do echo "i= $i"; done i= 1 i= 3 i= 4 $ IFS=$OLDIFS 

Вы можете использовать магию read :

 i=1,2,3,; echo $i | { IFS=","; read abc; echo "$a|$b|$c"; } i=1,2,3,; read abc <<<$(IFS=","; echo $i); echo "$a|$b|$c" i=1,2,3,; echo $i | { while read -d\, j; do echo $j; done; } 

Вы можете настроить список как переменную массива.

 #!/bin/bash col=1,3,4 declare -a colArray=($(echo $col | tr ',' ' ')) echo ${#colArray[@]} # number of elements in the array echo ${colArray[0]} # first element of the array for i in $(seq 0 $((${#colArray[@]}-1))) # loop through the array do echo ${colArray[$i]} done 

Прокрутка через может быть сделано несколькими разными способами, я только что выбрал один. Гораздо безопаснее, чем возиться с IFS.

Учитывая, что $col – это просто строка, вам нужно только преобразовать эти запятые ( , ) в пробелы, и вы сможете использовать цикл, например, for итерации через них.

Вот 2 метода, используя sed в 1-м, и объект поиска и замены в Bash:

 $ echo $col | sed 's/,/ /g' 1 3 4 $ echo ${col//,/ } 1 3 4 

Если вы выборочно хотите одно из значений, вы можете использовать cut :

 $ echo $col | cut -d"," -f1 1 $ echo $col | cut -d"," -f2 3 $ echo $col | cut -d"," -f3 4 

пример

Вот решение sed с циклом, когда мы «ходим» через значения $col .

 $ for i in $(echo $col | sed 's/,/ /g'); do echo $i; done 1 3 4 

Каждый раз через цикл мы могли бы помещать значения $col в другую переменную или делать то, что вам нужно делать, когда вы перебираете $col .

 for i in $(echo $col | sed 's/,/ /g'); do ...use $i in here... done 

Изменение внутреннего разделителя полей (IFS) может быть опасным, поскольку оно является общесистемной переменной, и многие приложения полагаются на свое значение по умолчанию. Поэтому рекомендуется сохранять и восстанавливать исходное значение каждый раз, когда вам нужно его модифицировать.

Пример с использованием предыдущего предложения:

 #!/bin/bash col=1,3,4, OLD_IFS=$IFS IFS="," for i in $col; do echo "i= $i" done IFS=$OLD_IFS 
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • перечислить файлы и сохранить их в переменных
  • Присвоение нового значения непосредственно в индекс символа значения в массиве с zsh
  • Поведение задания массива
  • как получить или отразить имя вызываемой функции bash?
  • Использование find с двумя наборами переменных
  • Объявление переменной параллельным sh -c ...
  • Как использовать расширенное значение переменной оболочки в имени другой переменной?
  • Как использовать глобальные переменные массивы в псевдонимах или функциях
  • Удерживать несколько пробелов, содержащих аргументы в одной переменной?
  • Bash: Объем переменных в цикле for с использованием тройника
  • Interesting Posts

    Как узнать, какие URL-адреса заблокированы Privoxy

    Как сохранить X-сессию – ArchLinux + Openbox

    Рекурсивно перечислить все каталоги, содержащие один или несколько файлов изображений jpg

    Kali linux: от легкого до полного дистрибутива

    Почему «touch -a» также устанавливает ctime?

    Случайные цвета и шутки в оболочке / терминале

    Существуют ли проблемы с дефисами в функциях, псевдонимах и исполняемых файлах?

    Почему Firefox 33 не использует GCM на нашем веб-сервере?

    Как увеличить размер файловой системы для соответствия раздела

    403 Запрещенная ошибка при попытке подключения к репозиториям ubuntu

    Остановить состояние гонки запланированных задач rsync (большой каталог, небольшой интервал времени)

    Pacman всегда терпел неудачу при обновлении (неизвестное доверие)

    Понимание ifconfig stats

    Как установить Adobe Acrobat Reader в Debian?

    Рекомендовать дистрибутив Linux для моего использования

    Linux и Unix - лучшая ОС в мире.