Por que esse script não funciona?

0

Quando eu executo o seguinte comando

./command *

usando este script

#!/bin/bash

for f in ./$1
do
    echo $f
done

apenas o primeiro arquivo especificado em $ 1 é ecoado. Minha pergunta é por quê?

    
por Hendré 11.11.2013 / 12:42

3 respostas

2

Porque você não usou aspas simples ou duplas ao executar seu comando:

./command '*'

ou:

./command "*"

Ou, se você quiser usar o ./command * , faça a seguinte modificação no seu script:

#!/bin/bash

for f in ./"$@"
do
    echo $f
done

Isso porque $1 refere-se ao primeiro argumento do seu comando e $@ refere-se a todos os argumentos do seu comando.

Leia também alguma documentação neste sentido: link

    
por Radu Rădeanu 11.11.2013 / 12:54
2

O shell expande o * quando você executa o comando. Então, rodar o script é equivalente a

./command file1.txt file2.txt file3.txt

$1 corresponde ao primeiro argumento, portanto, o loop tem apenas uma iteração.

    
por choroba 11.11.2013 / 12:57
0

$1 refere-se apenas ao primeiro argumento. Você precisa usar $* .

#!/bin/bash

for f in $*
do
     echo $f
done
    
por Clausi 11.11.2013 / 12:58