0

我的脚本很简单,我尝试将路径存储在变量中,然后用它来复制文件,脚本更长,副本很多,但使用相同的变量:

mainserverapp="${HOME}/Dropbox/servers/app-env-files"
cp -av "${mainserverapp}/.env*" ./

但我收到此错误:

cp: cannot stat '/home/.../Dropbox/servers/app-env-files/.env*': No such file or directory

但是如果我执行“ls”,则该文件夹存在变量正在发生的事情......我的错误在哪里?

更新:我想我找到了!问题是星号,任何不逐个文件复制的解决方案?

4

1 回答 1

0

*仅当星号 ( ) 不在引号内且未转义时,星号 ( ) 才会展开。

On "${mainserverapp}/.env*"only$mainserverapp被替换为它的值, the*被原样使用。

将星号移到引号外:

cp -av "${mainserverapp}"/.env* ./

您也可以编写它"${mainserverapp}/.env"*,但仅将动态部分放在引号内更有意义,它会被替换为您不知道的值。.env不会引起问题,不需要引用。And.env*表示表达式的逻辑部分,即名称以 . 开头的文件.env

阅读Bash 文档中的“文件名扩展” 。

于 2020-02-24T11:57:04.567 回答