diff --git a/src/lib/parser/quotes.rs b/src/lib/parser/quotes.rs
index d494132ffcbc9f3834e602fa1f6ca8459b2d4684..61ddfc91455ab7096d77e1bb5a9fff9c2c0dd641 100644
--- a/src/lib/parser/quotes.rs
+++ b/src/lib/parser/quotes.rs
@@ -192,7 +192,7 @@ impl<I: Iterator<Item = u8>> Terminator<I> {
                 self.array -= 1;
                 Some(b']')
             }
-            b'#' if prev_whitespace => {
+            b'#' if prev_whitespace || self.inner.prev().is_none() => {
                 self.inner.find(|&c| c == b'\n');
                 if self.array == 0 && self.subshell == 0 && !self.and_or && !self.empty {
                     self.terminated = true;
diff --git a/src/lib/shell/binary/readln.rs b/src/lib/shell/binary/readln.rs
index 205366f9186adbcf58c50dc7da3c1ffb33aa4e61..f690a3edbfde3f505c5fd6d6b390418d6a77a053 100644
--- a/src/lib/shell/binary/readln.rs
+++ b/src/lib/shell/binary/readln.rs
@@ -101,7 +101,7 @@ pub(crate) fn readln(shell: &mut Shell) -> Option<String> {
 
     match line {
         Ok(line) => {
-            if line.bytes().any(|c| !c.is_ascii_whitespace()) {
+            if line.bytes().next() != Some(b'#') && line.bytes().any(|c| !c.is_ascii_whitespace()) {
                 shell.flags |= flags::UNTERMINATED;
             }
             Some(line)