Bash расширяет переменные перед расширением имен путей (globbing). Если предположить, что он делает это наоборот (т.е. расширяет имена путей перед расширением переменных), можно ли написать сценарий bash, который использует и расширение переменных, и расширение путей, так что результат будет одинаковым независимо от порядка расширения.
Я придумал следующий простой сценарий bash.
#!/bin/bash
# Create a variable called myvar1
myvar1=~
echo $myvar1
# Use both path expansion and variable expansion with the ls command
# Assuming the variable was expanded first, the out should be the same as if the path was expanded first. Is my assumption correct?
ls $myvar1/*.txt
Может ли кто-нибудь проверить, что мой сценарий удовлетворительно отвечает на вопрос?
ls $myvar1/*.txt
Если бы имена путей были раскрыты перед переменными, это будет искать имена файлов, соответствующие *. Txt
в каталоге с именем $ myvar1
, чего у вас, вероятно, не будет. После этого он расширит $ myvar1
до пути к вашему домашнему каталогу, оставив / home / username / *. Txt
, что не то же самое, что сначала развернуть путь, а затем ищет в домашнем каталоге имена файлов, оканчивающиеся на .txt
.
В общем, поскольку имена файлов могут содержать знаки $
, я думаю, что порядок раскрытия всегда будет иметь значение. Рассмотрим любой сценарий, использующий глобус типа *
в каталоге, содержащем файл с именем $ PATH
.
Напротив, переменные, содержащие символы глобуса, легче обойти, поскольку вы управляете значениями своих переменных.