0

「.c」ソース ファイルから派生できるフォルダー内のすべての「.s」ファイルを削除しようとしています。これは私のコードです

for cfile in *.c; do 
    #replace the last letter with s
    cfile=${cfile/%c/s}
    for sfile in *.s; do
        #compare cfile with sfile; if exists delete sfile
        if [ $cfile==$sfile ]; then
            rm $sfile;
        fi
    done
done

しかし、このコードはすべての「.s」ファイルを削除します。ファイル名を正しく比較していないと思います。誰か助けてください。

4

5 に答える 5

2

bash で文字列を比較する標準的な方法は次のとおりです。

if [ "$string1" == "$string2" ]; then

この方法では、文字列の 1 つが空の場合でも実行されます。

于 2013-10-04T12:03:49.707 に答える
1

次のように使用できます。

[[ "$cfile" = "$sfile" ]] && rm "$sfile"

また

[[ "$cfile" == "$sfile" ]] && rm "$sfile"

または古い/bin/[(テスト)プログラムを使用して

[ "$cfile" = "$sfile" ] && rm "$sfile"
于 2013-10-04T12:08:12.187 に答える
1

言って

if [ $chile==$sfile ]; then

それは言うことになるので、常に真です

if [ something ]; then

オペレータの周囲には必ずスペースを確保してください。

他の問題は、あなたが言っていることです:

cfile=${cfile/%c/s}

あなたはおそらく言いたかった:

sfile=${cfile/%c/s}

そして、内側のループを取り除く必要があります:

for sfile in *.s; do
done

比較コードを保持するだけです。

于 2013-10-04T12:08:41.743 に答える