
echo是個(gè)常用命令,它的作用是在屏幕上顯示其操作對(duì)象。例如:
echo hello world!
會(huì)在屏幕上顯示hello world
但如果在字符串中寫(xiě)上通配符*或?,會(huì)怎么樣呢?
一般來(lái)說(shuō),它會(huì)擴(kuò)展,不會(huì)顯示通配符,而是顯示擴(kuò)展后的內(nèi)容。就是說(shuō),其顯示的,一般不是我們寫(xiě)在命令里的字符串。但特殊情況下,也可能是我們寫(xiě)的包含通配符的字符串,也就是說(shuō),沒(méi)有擴(kuò)展。
這是什么原因呢?
什么情況下擴(kuò)展,什么情況下不擴(kuò)展?擴(kuò)展后顯示的內(nèi)容是什么呢?
先說(shuō)擴(kuò)展后顯示的內(nèi)容是什么?
輸入命令:
echo *
就很容易看出顯示的內(nèi)容。這個(gè)命令將顯示當(dāng)前目錄中的文件名,如同ls命令一樣,兩個(gè)命令顯示的內(nèi)容完全一樣。
也就是說(shuō),加入通配符,會(huì)顯示文件名而不是命令中的那個(gè)字符串。
從這里也可以知道什么情況下不擴(kuò)展:如果沒(méi)有文件匹配,則仍然顯示命令中的字符串。
例如,命令echo *在當(dāng)前目錄下沒(méi)有文件時(shí),會(huì)顯示*。
由于/bin下總有文件,所以,命令
echo /bin/*
會(huì)顯示出/bin下的所有文件名。
擴(kuò)展的規(guī)則:如果有文件名匹配,就擴(kuò)展為文件名;否則按字符串原樣顯示。
在linux中,文件名第一個(gè)字符是圓點(diǎn)的,是隱藏文件,一般不會(huì)顯示。在ls命令中,需要加-a才能顯示出來(lái)。如果用通配符,使用echo命令能不能顯示呢?
echo .*
是可以的,但是多了兩個(gè).和..。在linux中,一個(gè)點(diǎn)指當(dāng)前目錄,兩個(gè)點(diǎn)指當(dāng)前目錄的上級(jí)目錄,它們兩個(gè)不是文件,是文件夾。所以需要記住這一點(diǎn),除了它們之外,就是隱藏文件。如果除了這兩個(gè)之外,沒(méi)有其它的,那指定目錄就沒(méi)有隱藏文件。
也可以用通配符將這兩個(gè)目錄排除:
echo .[!.]*
這個(gè)時(shí)候,如果有隱藏文件,會(huì)顯示隱藏文件名;沒(méi)有的話,就顯示這個(gè)字符串。
echo用于通配符擴(kuò)展的話,要顯示指定目錄的文件名,是將路徑寫(xiě)在字符串中。例如:
echo /root/.*
會(huì)顯示root目錄中所有隱藏文件名(包含路徑,也包含/root/.和/root/..)。
echo /root/.[!.]*
會(huì)顯示root中所有隱藏文件名,沒(méi)有/root/.和/root/..。
總結(jié):在有通配符的情況下,echo會(huì)顯示分區(qū)中所有匹配文件名,就是要擴(kuò)展。如果沒(méi)有匹配文件,則顯示原字符串(包含通配符的字符串),就是不擴(kuò)展。