Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么我的for循环只将所有需要的项存储为一个元素?_Bash - Fatal编程技术网

Bash 为什么我的for循环只将所有需要的项存储为一个元素?

Bash 为什么我的for循环只将所有需要的项存储为一个元素?,bash,Bash,我试图找出为什么所有项目都存储为一个元素: filedates=($dirPath/*.csv) filebasenames=() filedates2=() for file in ${filedates[@]}; do filebasenames+="${file##*/} " done for i in ${filebasenames[@]}; do

我试图找出为什么所有项目都存储为一个元素:

        filedates=($dirPath/*.csv)
        filebasenames=()
        filedates2=()
        for file in ${filedates[@]}; do
          filebasenames+="${file##*/} "
        done
        for i in ${filebasenames[@]}; do
                filedates2+="$(echo $i | cut -c6-13) "
        done

        for i in ${filedates2[@]}; do
                echo $i
        done
        echo test here ${filebasenames[0]}
        echo test here ${filebasenames[1]}

我很困惑,因为第三个for循环将每个元素打印在一个新行中,所以我假设数组中有多个元素,但当我回显“testhere”行时,它会显示一行中的所有元素,表示只有一个大字符串。我用这里的第二个回音测试验证2行

您没有附加到阵列;您只会附加到数组的第一个元素。附加到数组需要括号。(请注意,我已经从新数组元素中删除了空格。)

另一个数组可能仍然最好使用循环填充

for i in "${filebasenames[@]}"; do
    filedates2+=("$(echo "$i" | cut -c6-13)")
done

添加一个shebang,然后将脚本粘贴到那里并修复所有错误:@HelloQuantumWorld另外,请注意在所有变量和数组扩展周围使用双引号——这将防止文件名中出现空格或其他奇怪字符时出现问题。
filebasenames=("${filedates[@]##*/}")
for i in "${filebasenames[@]}"; do
    filedates2+=("$(echo "$i" | cut -c6-13)")
done