[英]How can I compare two strings in bash?
我正在嘗試刪除可以由“ .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”文件。 我認為它沒有正確比較文件名。 有人可以幫忙嗎?
比較bash中字符串的規范方法是:
if [ "$string1" == "$string2" ]; then
這樣,如果其中一個字符串為空,它將仍然運行。
您可以像這樣使用它:
[[ "$cfile" = "$sfile" ]] && rm "$sfile"
要么
[[ "$cfile" == "$sfile" ]] && rm "$sfile"
或通過使用舊的/bin/[
(測試)程序
[ "$cfile" = "$sfile" ] && rm "$sfile"
話
if [ $chile==$sfile ]; then
永遠是真的,因為這等於說
if [ something ]; then
始終確保操作員周圍有空間。
另一個問題是您在說:
cfile=${cfile/%c/s}
您可能想說:
sfile=${cfile/%c/s}
而且您需要擺脫內循環:
for sfile in *.s; do
done
只需保留比較代碼即可。
我認為最簡單的解決方案是:
for cfile in *.c ; do rm -f "${cfile%.c}.s" ; done
它僅列出所有.c
文件並嘗試刪除相應的.s
文件(如果有)。
for cFile in *.c; do
sFile="${cFile%c}s"
if [[ -f "$sFile" ]]; then
echo "delete $sFile"
fi
done
我將實際刪除文件作為練習。 :-)
您也可以蠻力刪除所有內容,然后將錯誤消息重定向到/dev/null
:
for cFile in *.c; do
sFile="${cFile%c}s"
rm "$sFile" &> /dev/null
done
但這當然會慢一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.