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