Como percorrer variáveis

Como percorrer variáveis

Eu tenho um comando em meu script csh que pode fornecer pelo menos 2 linhas de saída, mas pode ser mais. Estou transformando essas linhas em variáveis ​​separadas que desejo passar para outro comando. Como defino meu segundo comando para percorrer e executar para cada variável gerada pelo comando 1? Abaixo está o que tenho que transforma a saída do comando 1 em variáveis.

set vars = `echo "command 1"`

set numRows = $#vars  
if ($numRows < 2) then  
        echo "ERROR! $numRows rows!"  
        exit  
endif  


`echo '/command2 -L '$vars[1]'`

Responder1

Observe que estou usando o bash, não o csh, porque não me odeio. Mas você pode fazer tudo isso em csh, basta traduzir. Se você quiser trabalhar no bash, simplesmente execute "bash --login" primeiro e então você estará trabalhando no bash.

Para realizar o tipo de tarefa que você descreve em um script de shell, usamos pipes e não loops como faria em uma linguagem de programação. Não me interpretem mal, aísãoestruturas de loop em csh e bash, mas pelo que você descreveu, fazemos isso de forma diferente.

Se eu tivesse um comando que produzisse várias linhas de saída e quisesse que essas linhas fossem acionadas uma de cada vez por outro comando, conectaria os dois comandos com um pipe | , assim talvez:

arquivo gato.txt | grep "algumas palavras"

O comando grep processa cada linha vinda de STDIN, que é vinculada pelo pipe a STDOUT do comando cat. Este é um exemplo trivial, mas serve.

outro:

echo 'um,dois,três' | tr',' '\n'

Isso substituirá todas as vírgulas por novas linhas, criando uma saída de três linhas a partir da entrada de uma linha.

Se eu quisesse adicionar uma extensão aos nomes de todos os arquivos em um diretório, poderia fazer algo assim:

cd directory
for filename in *
do
  mv ${filename} ${filename}.extension
done

O * é um padrão de globbing de arquivo. Globbing de arquivo ocorre quando um padrão na linha de comando é substituído por qualquer nome de arquivo no diretório atual que corresponda ao padrão globbing. O * significa "qualquer coisa"

informação relacionada