关于 Bash 中变量和路径名扩展顺序的问题

关于 Bash 中变量和路径名扩展顺序的问题

Bash 在扩展路径名(通配符)之前扩展变量。假设它以相反的方式进行(即在扩展变量之前扩展路径名),是否可以编写一个同时使用变量扩展和路径扩展的 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  

有人可以验证我的脚本是否令人满意地回答了问题吗?

答案1

ls $myvar1/*.txt 

*.txt如果路径名在变量之前扩展,则会在名为 的目录中查找匹配的文件名$myvar1,而您可能不会有该目录。之后,它将扩展$myvar1到您的主目录的路径,留下,这与首先扩展路径然后查找以主目录/home/username/*.txt结尾的文件名不同。.txt

一般来说,由于文件名可以包含$符号,因此我认为扩展顺序始终很重要。考虑使用 glob 的任何脚本,例如*在包含名为$PATH.

相反,包含全局字符的变量更容易解决,因为您可以控制变量的值。

相关内容