gpt4 book ai didi

Bash glob 扩展,如 echo $pathInVar*

转载 作者:行者123 更新时间:2023-12-03 21:47:48 26 4
gpt4 key购买 nike

我有一个包含路径的变量,并想根据该路径扩展一个 glob 模式。我想了解为什么我的尝试不起作用以及在 bash 中执行此操作的首选方法是什么。
EX :我想列出我的主目录中的所有文本文件,或者只列出那些以“test”开头的文件。我失败的尝试:

foo="~/"
echo $foo*.txt
echo ${foo}test*.txt
这些结果在字符串输出 ~/* 中和 ~/test*txt分别。我尝试了不同的版本,包括引号等,但我想这足以说明我的问题和理解水平——我是一个 bash 初学者。问题是否与波浪号扩展与使用 $HOME 相关?
最终,我想遍历这些文件,但我问这个问题是为了理解 bash,而不仅仅是得到结果。
附言我确信已经有答案了,但我还没有找到任何帮助我理解这个案例的答案。我试图了解 bash 中的一般扩展顺序,但仍然不明白如何在此处应用它。

最佳答案

在一个球体中,*匹配文件名中的任何字符,但它确实 不是 匹配 / .因此,要获取主目录中的文件,请尝试:

foo=$HOME
echo $foo/*.txt
echo ${foo}/test*.txt
在奇数情况下 foo ( $HOME ) 包含 shell-active 字符,更好的做法是使用:
echo "$foo"/*.txt
echo "${foo}"/test*.txt
要循环这些文件,请使用:
for fname in "$foo"/*.txt
do
# do something
done
这种循环结构对于所有文件名都是安全的,即使是带有空格或其他 shell 事件字符的文件名。当然,这假设循环中的代码具有 $fname根据需要在双引号内。
更新修改后的问题
foo="~/"
~/在引号内时永远不会扩展:
$ foo="~/"
$ echo $foo
~/
如果你真的想用 ~/ , 不要使用引号。除非你想使用 ~ 的奇特功能之一,通常使用 $HOME 更简单、更可靠。反而。

关于Bash glob 扩展,如 echo $pathInVar*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63678680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com