Вопрос о порядке расширения переменных и имен путей в Bash

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  

Может ли кто-нибудь проверить, что мой сценарий удовлетворительно отвечает на вопрос?

0
20.12.2018, 22:55
1 ответ
ls $myvar1/*.txt 

Если бы имена путей были раскрыты перед переменными, это будет искать имена файлов, соответствующие *. Txt в каталоге с именем $ myvar1 , чего у вас, вероятно, не будет. После этого он расширит $ myvar1 до пути к вашему домашнему каталогу, оставив / home / username / *. Txt , что не то же самое, что сначала развернуть путь, а затем ищет в домашнем каталоге имена файлов, оканчивающиеся на .txt .

В общем, поскольку имена файлов могут содержать знаки $ , я думаю, что порядок раскрытия всегда будет иметь значение. Рассмотрим любой сценарий, использующий глобус типа * в каталоге, содержащем файл с именем $ PATH .

Напротив, переменные, содержащие символы глобуса, легче обойти, поскольку вы управляете значениями своих переменных.

0
28.01.2020, 04:47

Теги

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