将find命令与shell变量一起使用不起作用(无此文件或目录)

问题描述 投票:0回答:2

查找命令使用指定的字符串,但是在创建外壳程序变量时失败(没有这样的文件或目录)-参见下文。我使用转义(\)字符尝试了多种组合和排列,但运气不佳。

$ zsh --version                                                                                            
zsh 5.7.1 (x86_64-apple-darwin19.0)

$ sw_vers -productVersion                                                                                         
10.15.2

$ #
$ # The following FIND command works as expected.
$ #
$ find /Volumes/SeagateDrive/Backups.backupdb/Donald\'s\ iMac/*/Macintosh\ HD\ -\ Data/Users/Jazzfess1/ 

$ #
$ # I create a variable to use instead of the above string.
$ #
export bck="/Volumes/SeagateDrive/Backups.backupdb/Donald\'s\ iMac/*/Macintosh\ HD\ -\ Data/Users/Jazzfess1/“
$ echo $bck
/Volumes/SeagateDrive/Backups.backupdb/Donald\'s\ iMac/*/Macintosh\ HD\ -\ Data/Users/Jazzfess1/

$ #

$ # The variable is not working: without or with quotes
$ #
$ find $bck
find: /Volumes/SeagateDrive/Backups.backupdb/Donald\'s\ iMac/*/Macintosh\ HD\ -\ Data/Users/Jazzfess1/: No such file or directory

$ find “$bck”
find: /Volumes/SeagateDrive/Backups.backupdb/Donald\'s\ iMac/*/Macintosh\ HD\ -\ Data/Users/Jazzfess1/: No such file or directory
variables find zsh expansion
2个回答
1
投票

zsh默认情况下不允许在变量中使用globbing,您必须明确要求它:

find $~bck

P.S。而且您不必转义空格和双引号中的单引号:

export bck="/Volumes/SeagateDrive/Backups.backupdb/Donald's iMac/*/Macintosh HD - Data/Users/Jazzfess1/"

0
投票

您在分配给bck的过程中逃避了太多事情。 (它也不需要导出。)

bck="/Volumes/SeagateDrive/Backups.backupdb/Donald's iMac/*/Macintosh HD - Data/Users/Jazzfess1/"

另外,当您expand bck时,*将按字面意义处理,而不是外壳进一步扩展的范围。修改您的find命令以读取

bck="/Volumes/SeagateDrive/Backups.backupdb/Donald's iMac/"
find "$bck" -name "Macintosh HD - Data/Users/Jazzfess1" -type d

(不过,这是一个更以bash为中心的答案。虽然应该起作用,但冯施拉格的建议$~bck的使用zsh更简单。)

© www.soinside.com 2019 - 2024. All rights reserved.