Find
find 不能在 -path 或 -iregex 等的字元串變數中包含空格
在 -path 或 -iregex 查找選項的字元串變數中不能有空格。
這個輸入
'/home/demo.*/\.config/File System/.*t$'
是基於:
read i m="-iregex $i" find ~ $m
如果恆定,則不會像它那樣工作,而不是可變的
,所以不是
find ~ \'$m\'
,eval find ~ \'$m\'
正確的解決方案如何?
不要將操作放入包含數據的字元串變數中(請參閱Bash FAQ 50)。並且在使用變數時始終雙引號
i='/home/demo.*/\.config/File System/.*t$' find ~ -iregex "$i"
如果你想包含
-iregex
only if$i
不是空的,那麼你可以做這樣的事情,保留它但用.*
(即任何東西)替換正則表達式find ~ -iregex "${i-.*}"
如果您使用的外殼(例如
bash
(但不是sh
))可以理解數組,您可以使用其中一個來包含-iregex
唯一(如果需要)IFS= read -r i findRegex=() [[ -n "$i" ]] && findRegex=('-iregex' "$i") find ~ "${findRegex[@]}"
要查看這裡發生了什麼,您可以修改
find
為echo find
. 閱讀man bash
和搜尋Arrays
和/或@
也可能有所幫助。請注意,我也將您的更改
read i
為IFS= read -r i
. 這會阻止 shell 嘗試解析您的輸入數據,這可能會破壞包含多個空格($IFS
準確地說是字元)和其他字元組合的表達式