2015-09-26 231 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)。 –