Intereting Posts
кросс-платформенное потоковое аудио Как удалить этот неуправляемый каталог? В bash можно ли использовать целочисленную переменную в управлении циклом цикла for? Копирование больших файлов – создает ли пустым файл в пункте назначения? Регулярное выражение, как получить значение в сценарии оболочки? показывать только физические диски при использовании df и mount Создание нового раздела в пустом пространстве между двумя существующими разделами ext4 Как создать обобщенный бинарный архив для SageMath? dd копирует больше данных, чем существует в .img? Как преобразовать текст или символ в hex в оболочке korn Где находится журнал событий ACPI? Fedora 20: пользователи не могут войти в свой домашний каталог device-mapper: перезагрузить ioctl в кеше1 не удалось: занято или занято ресурсом Realtek 8160 не обнаружен на LFS Изменение файла XML на основе частичного имени

Переменная Bash изменяется, когда внутри кавычек

Я пытаюсь захватить первый файл, соответствующий шаблону, и использовать его в инструкции. Используя те же шаги, что и в разделе Как я могу получить первое совпадение от расширения подстановочных знаков? Я написал следующее:

#!/bin/bash files=("*.sql") firstfile=${files[0]} echo $firstfile echo "The first file is $firstfile" 

Когда я запускаю это, вывод:

sqlfile.sql

Первый файл: * .sql

Почему значение $firstfile изменяется в зависимости от контекста?

Выньте кавычки в строке файлов, которая оставляет:

 #!/bin/bash files=(*.sql) firstfile=${files[0]} echo $firstfile echo "The first file is $firstfile" 

Последняя строка печатает то, что действительно находится в $ firstfile.

Первое эхо расширяет $ firstfile через файловую систему, поскольку вы не использовали двойные кавычки.