[英]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 *.pdf
並find . -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,可能還有許多我不熟悉的),不同的引號意味着不同的東西。
從根本上說,引號為你做兩件事:
限制文本替換 :您正在使用shell替換對當前目錄中所有PDF文件的引用,以獲取*.pdf
。 這是文本替換的一個例子。 文件替換也可以使用變量名稱進行 - 例如:
bash$ MYVAR=test bash$ echo $MYVAR test bash$ echo '$MYVAR' $MYVAR
將為您提供輸出test
,因為$MYVAR
被替換為變量設置的值。
覆蓋空格作為參數分隔符 :讓我們假裝您有一個包含這些文件的目錄
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
注意第一個示例如何顯示兩個文件file1
和file2
,而第二個示例顯示一個文件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.