簡體   English   中英

linux shell中的某些東西和`something`有什么區別?

[英]what is the difference between something and `something` in the linux shell?

我希望使用find遞歸地找到所有.pdf文件

所以我輸入了find . -name *.pdf find . -name *.pdf

並且輸出很奇怪,它只包含當前目錄中的所有pdf文件,子目錄中的其他pdf文件被省略

然后我嘗試了這個find . -name '*.pdf' find . -name '*.pdf'

這一次,每件事都很好。我得到了我想要的東西,我的意思是所有的pdf文件,包括那些位於子目錄中的文件。

所以這就達成了協議: find . -name *.pdf之間find . -name *.pdf什么區別find . -name *.pdf find . -name *.pdffind . -name '*.pdf' find . -name '*.pdf'

是的,因為你發現引用在那里有所不同。

沒有引用*.pdf 甚至在查找運行之前就會被shell glob擴展規則擴展,因此find命令僅顯示該列表中的所有pdf文件。

換句話說,這個find命令:

find . -name *.pdf

與:

printf "%s\n" *.pdf

所以使用find的正確方法是:

find . -name '*.pdf'

在Linux shell中(bash,csh,sh,可能還有許多我不熟悉的),不同的引號意味着不同的東西。

從根本上說,引號為你做兩件事:

  1. 限制文本替換 :您正在使用shell替換對當前目錄中所有PDF文件的引用,以獲取*.pdf 這是文本替換的一個例子。 文件替換也可以使用變量名稱進行 - 例如:

     bash$ MYVAR=test bash$ echo $MYVAR test bash$ echo '$MYVAR' $MYVAR 

    將為您提供輸出test ,因為$MYVAR被替換為變量設置的值。

  2. 覆蓋空格作為參數分隔符 :讓我們假裝您有一個包含這些文件的目錄

     bash$ ls -1 file1 file1 file2 file2 

    如果你鍵入ls file1 ,你會得到你想象的file1 同樣, ls file2為您提供file2 以下命令顯示引號重寫空間作為參數分隔符的重要性:

     bash$ ls -1 file1 file2 file1 file2 bash$ ls -1 "file1 file2" file1 file2 

    注意第一個示例如何顯示兩個文件file1file2 ,而第二個示例顯示一個文件file1 file2 那是因為引號停止" " (單個空格)被用作參數分隔符。

最后一點說明:你原來的問題是關於something'something'之間的區別。 實際上, something'something'"something"之間確實存在差異, something 'something' "something" 考慮一下:

bash$ MYVAR=test
bash$ echo $MYVAR
test
bash$ echo '$MYVAR'
$MYVAR
bash$ echo "$MYVAR"
test

注意'$MYVAR'"$MYVAR"之間的區別。 ' (單引號)被認為是“強烈引用”,意味着其中包含的所有內容都是明確的。 " (雙引號)是一個”弱引號“,它不會擴展*? ,但會擴展變量名和命令替換。

Grymorie提供了大量關於報價的信息。 玩得開心學習!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM