Bash для цикла с подстановочными знаками и скрытыми файлами

Просто обвинив простой сценарий оболочки и мало перепутанный:

Вот мой сценарий:

% for f in $FILES; do echo "Processing $f file.."; done

Команда:

ls -la | grep bash 

производит:

% ls -a | grep bash
.bash_from_cshrc
.bash_history
.bash_profile
.bashrc

Когда

FILES=".bash*"

Я получаю те же результаты (другое форматирование) как ls-a. Однако, когда

FILES="*bash*"

Я получаю этот вывод:

Processing *bash* file..

Это не ожидаемый вывод и не, что я ожидаю. Разве мне не разрешают иметь подстановочный знак в начале имени файла?. в начале имени файла, "особенного" так или иначе?

Установка

FILES="bash*"

Также не работает.

22
задан 7ochem 26 June 2015 в 13:30
поделиться

4 ответа

С (++) (неуправляемый) действительно компилируется на простых двоичных. Некоторые, связанные с ОС - это вызовы функций BIOS и OS, они отличаются для каждой ОС, но все еще двоичные.
1. Ассемблер собирается в чистый двоичный двоичный, но, как это становится странным, он менее оптимизирован, чем C (++)
2. Ядро ОС, а также загрузчик, также написано в C, поэтому нет проблем здесь.

Java, управлял C ++ и другие материалы .NET, компилирует в какой-то псевдокод (MSIL в .NET), что делает его поперечной ОС и кроссплатформенной платформой, но требует локального переводчика или переводчика.

-121--1099916-

Файлы = ". Bash *" работает, потому что имя скрытых файлов начинается с .

Файлы = «Bash *» не работает, потому что имя скрытых файлов начинается с . не b

файлы = "* bash *" не работает, потому что подстановочный знак * в начале строки пропускает скрытые файлы.

7
ответ дан 29 November 2019 в 03:31
поделиться

Глобубинг по умолчанию в Bash не включает в себя имена файлов, начиная с a. (ака скрытые файлы).

Вы можете изменить это с помощью

ShopT -S dotglob

$ ls -a
.  ..  .a  .b  .c  d  e  f
$ ls *
d  e  f
$ shopt -s dotglob
$ ls *
.a  .b  .c  d  e  f
$ 

, чтобы снова отключить его, запустить Shopt -u dotglob .

47
ответ дан 29 November 2019 в 03:31
поделиться

Если вы хотите скрыть и не скрывать, установить dotglob (bash)

#!/bin/bash
shopt -s dotglob
for file in *
do
 echo "$file"
done
12
ответ дан 29 November 2019 в 03:31
поделиться

Да, . На фронте является особенным, и обычно не будет сопоставлено * подстановочный знак , как документировано на странице «Bash Man» (и общие для большинства оболочек UNIX):

, когда шаблон используется для расширения пути, персонажа "." в начале имени или сразу после косы быть соответствием явно, если не вариант оболочки dotglob набор. При сопоставлении патина символ Slash должен Всегда быть соответствием явно. В других случаях "." персонаж не обрабатывается специально.

10
ответ дан 29 November 2019 в 03:31
поделиться
Другие вопросы по тегам:

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