не передает ли оболочка * команде echo?
Да, когда она заключена в кавычки.Расширение имени файла, globbing , выполняется оболочкой во время сканирования строки (не командой echo
), но не тогда, когда шаблон находится внутри кавычек.
set -x
(xtrace
) является вашим другом, это показывает расширения и когда они происходят (ведущий +
- это приглашение xtrace
, PS4
):
set -x
myglob=*
echo $myglob
Дает:
+ myglob='*'
+ echo ... filenames in the current directory ...
Вы можете видеть, что расширение *
выполняется до вызова echo
.
Принимая во внимание:
set -x
myglob=*
echo "$myglob"
Дает:
+ myglob='*'
+ echo '*'
*
Здесь вы можете видеть, что расширения нет, и это одна из причин (есть и другие) использования кавычек.
set +x
отключит функцию xtrace
.