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 のそれぞれの指示を問題なく含む別のディレクトリを持つスクリプト全体に for ループがさらにありますが、コードのこの部分に問題があります。コマンド ls が結果全体を最初の位置に保存しているようですつまり、COS ディレクトリに cos1.txt、cos2.txt、cos3.txt がある場合、cos1.txt を ${array[0]} に、cos2.txt を ${array[1]} と cos3 に保存します。 ${array[2]} の txt を保存しています:

${array[0]} の cos1.txt cos2.txt cos3.txt、配列の位置 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

配列さえ必要ありません。グロブを for ループに入れるだけです。

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