Hello,
Here are some tasks to illustrate the problem :
       # ----------------------------------
       -  name: "Use Case 2"
           shell: grep "xxx" /etc/fstab
           ignore_errors: yes
           register: shell_result
          Â
       -  debug: var=shell_result          Â
       # ----------------------------------
       -  name: "Use Case 3"
           shell: grep "log" /etc/fstab > /tmp/test_ansible/use_case_3_result.txt
           ignore_errors: yes
           register: shell_result
          Â
       -  debug: var=shell_result          Â
       # ----------------------------------
       -  name: "Use Case 4"
           shell: grep "xxx" /etc/fstab > /tmp/test_ansible/use_case_4_result.txt
           ignore_errors: yes
           register: shell_result
          Â
       -  debug: var=shell_result          Â
Here are the results :
      Â
TASK [Use Case 1] **************************************************************
changed: [lnildt01]
TASK [debug] *******************************************************************
ok: [lnildt01] => {
   "shell_result": {
       "changed": true,
       "cmd": "grep \"log\" /etc/fstab",
       "delta": "0:00:00.003975",
       "end": "2016-11-17 09:35:15.918729",
       "rc": 0,
       "start": "2016-11-17 09:35:15.914754",
       "stderr": "",
       "stdout": "/dev/mapper/rootvg-lv_logs /app/logs            \text4   defaults       1 2",
       "stdout_lines": [
           "/dev/mapper/rootvg-lv_logs /app/logs            \text4   defaults       1 2"
       ],
       "warnings": []
   }
}
TASK [Use Case 2] **************************************************************
fatal: [lnildt01]: FAILED! => {"changed": true, "cmd": "grep \"xxx\" /etc/fstab", "delta": "0:00:00.003907", "end": "2016-11-17 09:35:16.234674", "failed": true, "rc": 1, "start": "2016-11-17 09:35:16.230767", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
...ignoring
TASK [debug] *******************************************************************
ok: [lnildt01] => {
   "shell_result": {
       "changed": true,
       "cmd": "grep \"xxx\" /etc/fstab",
       "delta": "0:00:00.003907",
       "end": "2016-11-17 09:35:16.234674",
       "failed": true,
       "rc": 1,
       "start": "2016-11-17 09:35:16.230767",
       "stderr": "",
       "stdout": "",
       "stdout_lines": [],
       "warnings": []
   }
}
TASK [Use Case 3] **************************************************************
changed: [lnildt01]
TASK [debug] *******************************************************************
ok: [lnildt01] => {
   "shell_result": {
       "changed": true,
       "cmd": "grep \"log\" /etc/fstab > /tmp/test_ansible/use_case_3_result.txt",
       "delta": "0:00:00.004247",
       "end": "2016-11-17 09:35:16.547488",
       "rc": 0,
       "start": "2016-11-17 09:35:16.543241",
       "stderr": "",
       "stdout": "",
       "stdout_lines": [],
       "warnings": []
   }
}
TASK [Use Case 4] **************************************************************
fatal: [lnildt01]: FAILED! => {"changed": true, "cmd": "grep \"xxx\" /etc/fstab > /tmp/test_ansible/use_case_4_result.txt", "delta": "0:00:00.004442", "end": "2016-11-17 09:35:16.859715", "failed": true, "rc": 1, "start": "2016-11-17 09:35:16.855273", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
...ignoring
NB1: This behavior is identical with the win_shell module for windows hosts.
Regards,