0
例如,如果我輸入〜或者〜/文檔作爲輸入我得到的消息/家庭/用戶名/文件工作正常。擊終端不能識別的路徑中的可變因「〜」
echo "Dose onoma katalogou"
read Directory
find $Directory -type f -perm 777
爲什麼會發生這種情況以及如何修復它以便能夠鍵入路徑名,包括「〜」?
例如,如果我輸入〜或者〜/文檔作爲輸入我得到的消息/家庭/用戶名/文件工作正常。擊終端不能識別的路徑中的可變因「〜」
echo "Dose onoma katalogou"
read Directory
find $Directory -type f -perm 777
爲什麼會發生這種情況以及如何修復它以便能夠鍵入路徑名,包括「〜」?
bash展開變量$ Directory after它展開任何〜,因此一旦$ Directory被展開,展開的時間已經過去了。
eval find $Directory -type f -perm 777
將工作,因爲eval將看到〜並再次運行shell擴展。
您可以通過簡單的命令測試效果:
tilde='~'
echo $tilde # prints a literal ~
eval echo $tilde # prints your home directory
順便說一句,包含空格的目錄名會引起問題。
請注意:'eval'是一個非常強大的機制 - 如果用戶控制'$ Directory'的內容,則非常危險。例如,如果用戶將'Directory ='$(rm -f $ HOME&)''放入'eval'命令中,某人會非常不高興 - 尤其是如果腳本是由'root'運行的話。 –