0

我已经知道我可以使用array=( $( ls . ) ),但我对这段代码有下一个问题:

array=( $( ls ./COS/cos*.txt ) )
for ((  i = 0 ;  i <= ${#array[*]}-1;  i++  ))
do
    sed 's/$'"/`echo \\\r`/" ${array[$i]} > ./COS/temp.txt
    mv ./COS/temp.txt ${array[$i]}
done

我在整个脚本中有更多的循环,具有不同的目录,sed 和 mv 的各自指令没有问题,但是我对这部分代码有问题,似乎命令 ls 将整个结果保存在第一个位置数组,即如果COS目录有cos1.txt、cos2.txt和cos3.txt,而不是将cos1.txt保存在${array[0]}中,cos2.txt保存在${array[1]}和cos3中。 ${array[2]} 中的 txt 正在保存:

cos1.txt cos2.txt cos3.txt in ${array[0]},数组位置 0 的整个列表。你知道出了什么问题吗?

4

1 回答 1

1

目前尚不清楚您的实际问题是什么,但您应该编写如下代码:

# Don't use ls. Just let the glob expand to the list of files
array=( ./COS/cos*.txt )
# Don't iterate over array indices; just iterate over the items themselves
for fname in "${array[@]}"; do
do
    # Are you trying to add a carriage return to the end of each line?
    sed "s/\$/$'\r'/" "$fname" > ./COS/temp.txt
    mv ./COS/temp.txt "$fname"
done

你甚至不需要数组;您可以简单地将 glob 放在 for 循环中:

for fname in ./COS/cos*.txt; do
   ...
done
于 2013-04-18T17:40:46.927 回答