Q:Andy was very tired because he had been jogging. 這句顯然是在表示因果關係,這種句型的使用時機為何呢?

A:在這句中,had been jogging 是過去完成進行式 (had been + V-ing),而 was 是過去簡單式。根據文法,在過去兩個先後發生的動作中,發生在前的動作要用過去完成式 (had + P.P.),而發生在後的動作用過去簡單式。換言之,過去完成式係用來表示發生在過去某個動作或某一特定時間之前的動作。例如:

  • Mr. Chen had studied English before he moved to San Francisco. (陳先生搬到舊金山之前已學了英文)
  • I had never seen such a beautiful beach before I went to Pescadores. (在我去澎湖之前,我從未看過這麼美麗的海灘)
  • A: Had you ever visited the U.K. before your trip in 2011? (在 2011 年的英國行之前,你有去過英國嗎?)
    B: Yes, I had been to the U.K. once before. (有,我之前去過一次)

然而,若過去完成式的動作一直持續至過去某個動作或某一特定時間,那麼我們須使用過去完成進行式來表示。例如:

  • James had been waiting there for more than two hours when Mary finally arrived. (當瑪麗終於抵達時,詹姆斯已在那裡等了超過兩小時)
  • Carla had been working at that company for three years when it went out of business. (在那家公司歇業時,卡拉已在該公司工作了三年)
  • How long had you been waiting to get on the bus? (你等多久才坐上公車呢?)

由於過去完成式或過去完成進行式的動作都發生在過去簡單式的動作之前,兩者自然很容易就形成因果 (cause and effect) 關係;是故,過去完成式 + 過去簡單式或過去完成進行式 + 過去簡單式,乃成為表示過去發生的兩個有因果關係的動作或事件的完美組合,而問題中的句子 Andy was very tired because he had been jogging. (安迪很疲憊,因為他一直在慢跑) 是屬於過去完成進行式 + 過去簡單式的組合。例如:

  • I did not have any money because I had lost my wallet. (我身無分文,因為我遺失了錢包)
  • Sam knew Bangkok so well because he had visited the city several times. (山姆對曼谷瞭若指掌,因為他已去過曼谷好幾趟)
  • We were not able to get a hotel room because we had not booked in advance. (我們沒有飯店房間可住,因為我們事先沒有預訂)
  • Barry failed the final test because he had not been attending class. (貝瑞期末考不及格,因為他一直沒來上課)
  • Kevin was very tired because he had been washing cars. (凱文非常疲憊,因為他一直在洗車)
  • Amy gained weight because she had been overeating. (艾美體重增加了,因為她一直暴飲暴食)

值得一提的是,在過去完成進行式 + 過去簡單式的情況中,過去完成進行式的動作在過去簡單式的動作或狀態生時可能還在持續中,但也可能已告結束。

事實上,現在完成進行式 (has/have been + V-ing) + 現在簡單式亦是一種表示因果關係的完美句型,它是用來表示最近的動作產生現在的結果或對現在造成的影響。但必須注意是,現在完成式 (has/have + P.P.) 並沒有這樣的用法。例如:

  • My hands are so dirty because I have been working in the garden. (我的雙手很髒,因為我一直在花園工作)
  • Kevin is very tired because he has been jogging/washing cars. (凱文非常疲憊,因為他一直在慢跑 / 洗車)
  • The ground is soaking wet because it has been raining all night. (地面濕透了,因為整晚都在下雨)

同樣地,在現在完成進行式 + 現在簡單式的情況中,現在完成進行式的動作在現在簡單式的動作或狀態發生時可能還在持續中,但也可能已告結束。以 The ground is soaking wet because it has been raining all night. 這句為例,在講這句話的時候,雨可能已經停了,但整晚下雨對現在所產生的結果或造成的影響 (地面濕透了) 是顯而易見的。

現在完成進行式

句型

has/have + been + 現在分詞

例句:

  • They have been waiting here for two hours. (他們已在這裡等了兩小時)
  • Have they been waiting here for two hours? (他們已在這裡等了兩小時嗎?)
  • They have not been waiting here for two hours. (他們沒有在這裡等了兩小時)

用法之一:從過去持續到現在的時間

我們使用現在完成進行式來表示某事發生在過去且一直持續到現在。for ten minutes, for two weeks, since Thursday 等等,都是可與現在完成進行式連用的時間副詞片語。

例句:

  • They have been talking for the last 30 minutes. (他們已交談了三十分鐘)
  • Stella has been working at that company for four years. (史泰拉已在那家公司工作了四年)
  • What have you been doing for the last hour? (過去一小時來你都在做什麼呢?)
  • Howard has been teaching at the university since July. (自七月以來霍華德就在這所大學任教)
  • We have been waiting here for over two hours! (我們已在這裡等了超過兩小時!)
  • Why has Eric not been taking his medicine for the last three days? (過去三天來艾立克為何都沒有服藥呢?)

用法之二:最近性

我們亦可在沒有時間副詞片語的情況下使用現在完成進行式,此時它強調的是「最近性」,所以經常與 recently 或 lately 連用。進一步地說,現在完成進行式可以用來表示最近完成的動作產生現在的結果或對現在造成的影響。

例句:

  • She has been working hard recently. (她最近一直努力地工作)
  • Recently, I have been feeling really tired. (最近我一直覺得很累)
  • Hannah has been watching too much television lately. (漢娜近來看了太多的電視)
  • Have you been exercising lately? (你近來有在運動嗎?)
  • Robin has been feeling a little depressed. (羅蘋最近一直覺得有點沮喪)
  • Paul has not been practicing his English. (保羅最近沒有練習英文)
  • What have you been doing? (你最近都在做什麼呢?)
  • I have been working in the garden, and that’s why my hands are so dirty. (我一直在花園工作,那就是我的雙手很髒的原因) - 最近完成的動作產生現在的結果。

重點提示

切記現在完成進行式含有「最近,近來;不久前」(lately, recently) 的意思。如果我們在問句中使用現在完成進行式,如 “Have you been feeling alright?” (你的身體覺得還好吧?),這可能暗示此人現在看起來有病或不健康。所以,類似 “Have you been smoking?” (你不久前有抽菸嗎?) 這樣的問句,可能暗示你在此人身上聞到了菸味。總而言之,在問句中使用這種時態,係表示你可以看到、聞到、聽到或感覺到動作的結果,也就是最近完成的動作產生現在的結果或對現在造成的影響。因此,現在完成進行式若使用不當,可能會侮辱到別人。

切記非進行式動詞及若干混合動詞的非進行式用法

我們必須記住非進行式動詞及若干混合動詞的非進行式用法,它們不能用於任何進行式時態。換言之,這些動詞必須使用現在完成式,不可使用現在完成進行式。

例句:

  • Tom has been having his car for two years. (湯姆有車已經兩年了) (誤)
  • Tom has had his car for two years. (湯姆有車已經兩年了) (正)

副詞的位置

always, usually, only, never, ever, still, just 等副詞通常位在助動詞 have/has 的後面,即位在 have/has 和過去分詞之間。

例句:

  • They have only been waiting here for one hour. (他們只在這裡等了一小時)
  • Have they only been waiting here for one hour? (他們只在這裡等了一小時嗎?)

主動態/被動態

例句:

  • Recently, Jack has been doing the work. (最近傑克一直在做這項工作) - 主動態
  • Recently, the work has been being done by Jack. (最近這項工作一直被傑克所做) - 被動態

注意:從上面的例句可知,現在完成進行式的被動態句型顯得十分不自然,因此現在完成進行式鮮少使用被動態。

Q:I've lived here for three years. 和 I've been living here for three years. 有何不同呢?

A:這問題中的第一句是現在完成式 (present perfect),而第二句是現在完成進行式 (present perfect progressive)。現在完成式主要是強調在過去某一不確定時間已完成但與現在仍有關連的動作,如 The author has written three books. (這位作家已寫了三本書)。現在完成進行式則是在強調「最近性」,所以它經常與 recently 或 lately 連用,如 She has been working hard recently. (她最近一直努力地工作)。

這兩者的另一項差異是,現在完成進行式可以用來表示最近完成的動作產生現在的結果或對現在造成的影響,但現在完成式則沒有這樣的用法,如 I have been working in the garden, and that’s why my hands are so dirty. (我一直在花園工作,那就是我的雙手很髒的原因 — 最近完成的動作產生現在的結果)。不過,這兩者都可用來表示動作持續到目前為止的時間,如 Peter has worked for that company for five years. (彼得已在那家公司工作五年);John has been painting for four hours. (約翰已作畫四個鐘頭)。

上述都是一般文法書所敘述的現在完成式和現在完成進行式的用法及它們之間的差異,在此不想著墨太多。然而,藉著這問題正好可以補充兩項在一般文法書看不到的用法或差異。

第一項正好回答這問題。如果完成式中的動詞是有關「居住」、「工作」或「職業」方面的動詞,那麼現在完成式和現在完成進行式的意思是一樣的。所以,I’ve lived here for three years. 和 I’ve been living here for three years. (我已住在這裡三年) 的意思並無二致,而上面的 Peter has worked for that company for five years. 也可寫成 Peter has been working for that company for five years.。

第二項也可說是這兩者之間另一非常重要的差異。當要表達已完成的數量時,要使用現在完成式,不可使用現在完成進行式 — 後者是在強調動作持續的時間。下面就是說明這項差異的例句:

  • He’s driven 320 kilometers. (他開車已開了 320 公里)
  • He’s been driving for 6 hours. (他開車已開了 6 個小時)