Matriz de leitura Bash em formato diferente

1

Eu uso o script abaixo para ler os artigos e exibir os artigos.

echo " Please enter device no"
read -a articles
index=0
count=${#articles[@]}
echo "The number of articles are  $count"
while [ $index -lt $count ]
  do
    echo ${articles[$index]}
    index=$index+1
  done

Mas a questão é, eu preciso dar artigos através dos espaços como article1 article2 article3 ?

Existe uma maneira, eu posso inserir via vírgula como article1, article2, article3 ?

A matriz deve aceitar nos dois sentidos (vírgula ou espaços)?

Quaisquer ponteiros apreciados!

    
por user261334 06.05.2014 / 11:28

2 respostas

1

$index não pode ser incrementado assim. Tente usar:

index=$((index+1))  # Universal shell (POSIX)

ou

((index++))         # bash 
    
por Scrutinizer 06.05.2014 / 13:01
1

Defina seu próprio IFS antes de read

De man Bash

  

IFS : o separador de campo interno usado para dividir palavras   após a expansão e para dividir as linhas em palavras com a leitura   comando interno. O valor padrão é <space><tab><newline>

$ IFS=' ,' read -a foo
cat dog sheep

$ printf '%s\n' ${foo[@]}
cat
dog
sheep

$ IFS=' ,' read -a foo
cat, dog, sheep

$ printf '%s\n' ${foo[@]}
cat
dog
sheep

Certifique-se de redefinir o IFS var para seu padrão depois disso

    
por Flint 06.05.2014 / 13:13