Почему этот скрипт не работает?

Когда я запускаю следующую команду

./command *

, используя этот скрипт

#!/bin/bash

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

, отображается только первый файл, указанный в $ 1. У меня вопрос почему?

0
задан 11 November 2013 в 15:42

3 ответа

Потому что вы не использовали простые или двойные кавычки при запуске команды:

./command '*'

или:

./command "*"

Или, если вы хотите использовать ./command * затем внесите следующие изменения в ваш скрипт:

#!/bin/bash

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

Это потому, что $1 ссылается на первый аргумент вашей команды, а $@ ссылается на все аргументы вашей команды.

Прочтите также некоторую документацию в этом смысле: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

0
ответ дан 11 November 2013 в 15:42

Оболочка расширяет * при запуске команды. Таким образом, выполнение сценария эквивалентно

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

$1 соответствует первому аргументу, поэтому цикл имеет только одну итерацию.

0
ответ дан 11 November 2013 в 15:42

$1 относится только к первому аргументу. Вам нужно использовать $*.

#!/bin/bash

for f in $*
do
     echo $f
done
0
ответ дан 11 November 2013 в 15:42

Другие вопросы по тегам:

Похожие вопросы: