Просто обвинив простой сценарий оболочки и мало перепутанный:
Вот мой сценарий:
% 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*"
Также не работает.
С (++) (неуправляемый) действительно компилируется на простых двоичных. Некоторые, связанные с ОС - это вызовы функций BIOS и OS, они отличаются для каждой ОС, но все еще двоичные.
1. Ассемблер собирается в чистый двоичный двоичный, но, как это становится странным, он менее оптимизирован, чем C (++)
2. Ядро ОС, а также загрузчик, также написано в C, поэтому нет проблем здесь.
Java, управлял C ++ и другие материалы .NET, компилирует в какой-то псевдокод (MSIL в .NET), что делает его поперечной ОС и кроссплатформенной платформой, но требует локального переводчика или переводчика.
Файлы = ". Bash *"
работает, потому что имя скрытых файлов начинается с .
Файлы = «Bash *»
не работает, потому что имя скрытых файлов начинается с .
не b
файлы = "* bash *"
не работает, потому что подстановочный знак *
в начале строки пропускает скрытые файлы.
Глобубинг по умолчанию в 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
.
Если вы хотите скрыть и не скрывать, установить dotglob (bash)
#!/bin/bash
shopt -s dotglob
for file in *
do
echo "$file"
done
Да, .
На фронте является особенным, и обычно не будет сопоставлено *
подстановочный знак , как документировано на странице «Bash Man» (и общие для большинства оболочек UNIX):
, когда шаблон используется для расширения пути, персонажа "." в начале имени или сразу после косы быть соответствием явно, если не вариант оболочки dotglob набор. При сопоставлении патина символ Slash должен Всегда быть соответствием явно. В других случаях "." персонаж не обрабатывается специально.