使用通配符(*)将文件复制到bash脚本中的文件夹 – 为什么它不工作?

我写一个bash脚本创build一个文件夹,并将文件复制到该文件夹​​。 它从命令行工作,但不是从我的脚本。 这里有什么问题?

#! /bin/sh DIR_NAME=files ROOT=.. FOOD_DIR=food FRUITS_DIR=fruits rm -rf $DIR_NAME mkdir $DIR_NAME chmod 755 $DIR_NAME cp $ROOT/$FOOD_DIR/"*" $DIR_NAME/ 

我得到:

 cp: cannot stat `../food/fruits/*': No such file or directory 

Solutions Collecting From Web of "使用通配符(*)将文件复制到bash脚本中的文件夹 – 为什么它不工作?"

你得到的是完全倒退 – *字符之外的所有内容都应该用双引号括起来:

 #!/bin/sh dir_name=files root=.. food_dir=food fruits_dir=fruits rm -rf "$dir_name" mkdir "$dir_name" chmod 755 "$dir_name" cp "$root/$food_dir/"* "$dir_name/" 

另外,作为最佳实践/惯例,非环境变量名称应该是小写的,以避免与环境变量和内建函数的名称冲突。