关于ShellCheck SC2048的疑问:${array[*]}为何未扩展额外文件?
关于${array[*]}未扩展出t3、t4的原因解释
你的疑惑核心是对${array[*]}的作用理解有偏差:
- 首先,脚本里
array=(t1 t2)已经明确将数组的元素固定为t1和t2,数组的内容完全由你手动定义的初始值决定,不会自动扫描当前目录的文件进行填充。 ${array[*]}的作用仅仅是将数组中已有的元素展开为多个独立参数,比如你定义的数组里是t1、t2,它就只会展开成这两个参数,和目录里存在的t3、t4没有任何关联。
ShellCheck SC2048规则里提到的“扩展为多个参数”,指的是数组内部元素的展开,而非自动匹配目录文件。
如果你的需求是复制当前目录下所有t开头的文件到dir目录,有两种更合适的写法:
- 直接使用通配符匹配:
cp t* ./dir - 先将匹配到的文件存入数组,再复制(推荐用
"${array[@]}",双引号+@能保留每个文件名作为独立参数,适配带空格的文件名场景):array=(t*) cp "${array[@]}" ./dir
内容的提问来源于stack exchange,提问作者Jack Ma
相关产品推荐
相关产品推荐

