Find

find 不能在 -path 或 -iregex 等的字元串變數中包含空格

  • October 26, 2020

在 -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"

如果你想包含-iregexonly if$i不是空的,那麼你可以做這樣的事情,保留它但用.*(即任何東西)替換正則表達式

find ~ -iregex "${i-.*}"

如果您使用的外殼(例如bash(但不是sh))可以理解數組,您可以使用其中一個來包含-iregex唯一(如果需要)

IFS= read -r i

findRegex=()
[[ -n "$i" ]] && findRegex=('-iregex' "$i")

find ~ "${findRegex[@]}"

要查看這裡發生了什麼,您可以修改findecho find. 閱讀man bash和搜尋Arrays和/或@也可能有所幫助。

請注意,我也將您的更改read iIFS= read -r i. 這會阻止 shell 嘗試解析您的輸入數據,這可能會破壞包含多個空格($IFS準確地說是字元)和其他字元組合的表達式

引用自:https://unix.stackexchange.com/questions/616445