2015-09-26 236 views
2

不明白,我有以下代码:文件名扩展在bash

#!/bin/sh 

LOG="myfile.log" 

ls -l "${LOG}_*" 

find . -type f -name "${LOG}_*" -exec ls -l {} \; 

产生以下输出:

$ ./test.sh 

ls: cannot access myfile.log_*: No such file or directory 

-rw-r--r--. 1 user user 0 Sep 26 23:03 ./myfile.log_20150926_1928 
-rw-r--r--. 1 user user 0 Sep 26 23:03 ./myfile.log_20150926_1926 
-rw-r--r--. 1 user user 0 Sep 26 23:03 ./myfile.log_20150926_1930 
-rw-r--r--. 1 user user 0 Sep 26 23:03 ./myfile.log_20150926_1927 
-rw-r--r--. 1 user user 0 Sep 26 23:03 ./myfile.log_20150926_1929 

我不明白,为什么“查找”命令的工作,而不是“LS “

Cheers

+0

真的这是一个关于ls的问题,而不是编程。 [询问Ubuntu](http://askubuntu.com/questions/25655/why-doesnt-this-wildcard-work-the-way-i-expect)对行为有很好的描述。 – TZHX

+0

@TZHX这是一个关于bash的globbing准确规则的问题。 bash是一种编程语言,所以它属于这里。 – pmos

+0

@TZHX还有比Ubuntu更多的东西。 FreeBSD,Solaris,HP-UX,IRIX,Cygwin,任何unixoid系统都有一个可以解决这个问题的shell。我已经编辑它不再是bash特定的。 – Jens

回答

5

Shell仅在未引用时才扩展星号。

查找扩展-name本身的通配符,并且通常必须引用它们以防止shell扩展它们。

+0

很好的答案。谢谢。这是工作。 – zuitje

+0

@zuitje:请参阅[Shell Expansions]上的Bash手册(http://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions)和[文件名扩展](http:// www。 gnu.org/software/bash/manual/bash.html#Filename-Expansion)。 –