5

鉴于以下文件

$ ls
bar.txt  baz.txt  qux.txt

我只想将第一个txt文件保存到变量中。我试过这个

$ var=*.txt

但它只是保存所有文件

$ echo $var
bar.txt baz.txt qux.txt

如果可能的话,我想使用通配符来做到这一点,这extglob没关系。此处的文件名称中没有空格,但我希望该解决方案也适用于带有空格的文件。

使用kamituel的回答后,我意识到这也可以

$ set *.txt

$ echo $1
bar.txt
4

3 回答 3

9

用这个:

$ var=(*.txt)
$ echo $var
bar.txt

这里的关键是使用括号 - 将元素放入数组中。因此echo $var打印数组 ( bar.txt) 中的第一个元素。您可以通过打印整个数组来看到:

$ echo ${var[@]}
bar.txt baz.txt qux.txt
于 2013-04-05T06:33:01.077 回答
0

您可以(稍微)滥用该for语句来设置变量:

$ for var in *.txt; do break; done
$ echo $var
bar.txt

从好的方面来说,var只包含第一个文件的名称,而不是与模式匹配的所有内容。不利的一面是,这比 kamituel 提供的数组解决方案更冗长,并且存储所有匹配文件的开销在现实生活中不太可能成为问题。

于 2013-04-05T14:02:12.067 回答
0
$ touch "test file1.txt"
$ touch "test file2.txt"
$ var=`ls *.txt | head -1`
$ echo $var
test file1.txt`

这将返回第一个文件。

要找到最后一个,请执行“ls -r”而不是“ls”或“tail -1”而不是“head -1”。

于 2013-04-06T06:13:49.573 回答