文件名扩展在bash
问题描述:
不明白,我有以下代码:文件名扩展在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
答
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)。 –
真的这是一个关于ls的问题,而不是编程。 [询问Ubuntu](http://askubuntu.com/questions/25655/why-doesnt-this-wildcard-work-the-way-i-expect)对行为有很好的描述。 – TZHX
@TZHX这是一个关于bash的globbing准确规则的问题。 bash是一种编程语言,所以它属于这里。 – pmos
@TZHX还有比Ubuntu更多的东西。 FreeBSD,Solaris,HP-UX,IRIX,Cygwin,任何unixoid系统都有一个可以解决这个问题的shell。我已经编辑它不再是bash特定的。 – Jens