Bash-скриптинг с IFS - PullRequest
       17

Bash-скриптинг с IFS

0 голосов
/ 28 апреля 2018

Мне нужно в Bash с IFS = ‘,’

. / Test.sh Майк, Техас Ник, Торонто Лукас, Айова

Привет, Майк

Вы из Техаса

Привет, Ник

Вы из Торонто

Привет, Лукас

Вы из Айовы

#!/bin/bash
    IFS=',' read -r -a array <<< "$string"


    for index in "${!array[@]}"
    do
            echo Hello "$index ${array[index]}"
            echo You are from "$index ${array[index]}"
    done

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Вам не нужно изменять IFS ( Внутренний разделитель полей ), вам нужно расширение параметра с удалением подстроки , например,

#!/bin/bash

for i in "$@"; do
    printf "Hello %s\nYou are from %s\n" "${i%,*}" "${i#*,}"
done

Пример использования / Вывод

$ ./test.sh Mike,Texas Nik,Toronto Lucas,Iowa
Hello Mike
You are from Texas
Hello Nik
You are from Toronto
Hello Lucas
You are from Iowa
0 голосов
/ 29 апреля 2018

Вы можете циклически перебирать аргументы, используя for argument - при этом переменная с именем argument будет заполняться аргументами, разделенными пробелами, по одному за раз. Затем вы можете прочитать значения через запятую. Например:

set -- Mike,Texas Nik,Toronto Lucas,Iowa # For testing purposes
for argument
do
    IFS=, read name state <<< "$parameter"
    echo "Hello ${name}"
    echo "You are from ${state}"
done
0 голосов
/ 28 апреля 2018

Исходя из того, что я вижу, вот мое предложение:

for i in $* ; do

     name=$(echo $i | awk -F, '{print $1}' )
     wherefrom=$(echo $i | awk -F, '{print $2'})

     echo Hello $name, you are from $wherefrom
done
...