L oop, принимая значения переменных - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь написать bash скрипт и как я могу взять значения, определенные в переменной, в формате разделителя каналов и распечатать их. Ниже приведен алгоритм, о котором я думаю, но не уверен насчет bash команд.

#!/bin/bash
variable1="A|B|C"

if [ ! -z "$variable1" ]
   count=#should return 3 as there are 3 values (A|B|C)
fi

while count>0; do
derivedvariable=#should get A, B, C in loop
print $derivedvariable
done
output should be: 
A
B
C

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Используйте массив для хранения элементов вашего ввода, разделенных символом:

s='A|B|C'
IFS='|' read -ra arr <<< "$s"

# length:
echo "${#arr[@]}"

# looping array:
for i in "${arr[@]}"; do
   echo "$i"
done

Вывод:

3
A
B
C
1 голос
/ 10 апреля 2020

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

variable1='A|B|C'
IFS='|'
for i in $variable1
do
    echo "$i"
done
0 голосов
/ 10 апреля 2020

Используйте grep или tr:

grep -o "[^|]*" <<< "${variable1}"

tr '|' '\n' <<< "${variable1}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...