给出以下文件
$ ls
bar.txt baz.txt qux.txt
我想只将第一个txt
文件保存到变量中。我试过这个
$ var=*.txt
但它只保存所有文件
$ echo $var
bar.txt baz.txt qux.txt
如果可能的话,我想使用通配符执行此操作,extglob
没问题。这里的文件名称中没有空格,但我希望该解决方案也适用于带空格的文件。
使用kamituel’s answer后,我意识到这也可以起作用
$ set *.txt
$ echo $1
bar.txt
答案 0 :(得分:9)
使用此:
$ var=(*.txt)
$ echo $var
bar.txt
这里的关键是使用括号 - 将元素放入数组中。所以echo $var
打印出数组中的第一个元素(bar.txt
)。您可以通过打印整个数组来看到:
$ echo ${var[@]}
bar.txt baz.txt qux.txt
答案 1 :(得分:0)
您可以(稍微)滥用for
语句来设置变量:
$ for var in *.txt; do break; done
$ echo $var
bar.txt
在正面,var
仅包含第一个文件的名称,而不是与模式匹配的所有内容。从负面来看,这比kamituel提供的数组解决方案更加冗长,存储所有匹配文件的开销在现实生活中不太可能成为问题。
答案 2 :(得分: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”。