cd empty; for filename in $; do echo $filename; done
$
(типа, навожу на мысль... )
Не смешно.
Доллар и в полном каталоге выводится. А на мысль я не навелся, промашка вышла.
Видимо если запрос списка файлов вернул пустоту, та шелл подстановку не делает и звездочка остается звездочкой. Вопрос - зачем оно нам?
(мрачно) Надо идти читать длинные маны...
Странно что такой эффект у меня возникает тока на РХ-дистрах, на СЛЕС10 к примеру звездочки нету
Вроде $(ls) помогает от звездочки, но еще нюанс - если имя файла содержит пробелы - то наблюдаентся вот такая картина с $(ls) - что не есть гут!!
#!/bin/bash
rm -rf ~/somedir
touch ~/somedir/"test file"
cd ~/somedir
for filename in *
do
echo $filename
done
echo ----------
for filenamels in $(ls)
do
echo $filenamels
done
#!/bin/bash
rm -rf ~/somedir
mkdir ~/somedir
touch ~/somedir/"first file"
touch ~/somedir/"cesond file"
cd ~/somedir
for filename in *
do
echo $filename
done
echo ----------
for filenamels in "$(ls -1)"
do
echo $filenamels
done
[vasiliy@beezir tmp]$ for i in *; do echo $i; done
*
[vasiliy@beezir tmp]$ for i in `ls -1`; do echo $i; done
[vasiliy@beezir tmp]$ for i in `ls -a1`; do echo $i; done
.
..
.file
[vasiliy@beezir tmp]$ for i in `ls -A1`; do echo $i; done
.file
звездочка там скорее всего потому что * заменяется шеллом на имена файлов, если замен нет, то bash оставляет все как есть:
Есть такой скрипт (ниже) - он перебирает все файлы в каталоге (кроме скрытых) и выводит их имена на экран
а чем плох просто
$ ls -1
?
Зачем обязательно скрипт, если такая функциональность уже есть в ls?
"перебрать файлы в каталоге", обычно означает не просто вывести на терминал список файлов но еще и по возможности сделать с ними что-то полезное(смотри внимательно примеры приведенные в этом топике). echo правда для перебора все-таки не лучший вариант, да.