Bash不';t在for循环中打印带问号的字符串

Bash不';t在for循环中打印带问号的字符串,bash,for-loop,echo,file-read,Bash,For Loop,Echo,File Read,我有一个包含以下内容的文本文件 My test strings that dont have a question mark except this line? but not these two 当我尝试在bash中读取文件时,例如 ph_lines="/path/to/file.txt" for l in $(cat "$ph_lines") do echo "$l" done 除了带问号的字符串外,所有内容都打印在输出上 我试着在读行时使用;回波线;完成

我有一个包含以下内容的文本文件

My test
strings
that dont have
a question 
mark except this line?
but not
these two
当我尝试在bash中读取文件时,例如

ph_lines="/path/to/file.txt"
for l in $(cat "$ph_lines") 
do
    echo "$l"
done
除了带问号的字符串外,所有内容都打印在输出上

我试着在读行时使用
;回波线;完成<$filename
,但仍然存在相同的问题

只有当我使用sed删除问号时,才能捕获所有行

for l in $(cat ${ph_lines} | sed $'s/\?//' )

谢谢大家!

要正确读取文件,请使用以下示例:

不带引号的扩展会导致路径名扩展,并且由于您启用了
nullglob
,并且没有匹配的文件,因此前面的示例没有显示任何内容。如果您有一些匹配的文件,您将看到这些文件:

$ touch questions question2

$ echo $var
question2 questions

您可以在编辑器中设置以获取有关这些问题的自动警告。

您在读取行时没有在变量前面加上
$
;回音“$line”;已完成验证脚本的。是有用的阅读。欢迎来到StackOverflow!您帖子中的代码没有您描述的问题。您的实际脚本具有
IFS=$'\n'的效果;shopt-s nullglob,这是重现问题所必需的。Protip:确保问题完整并捕获所有必要细节的最简单方法是将帖子中的代码复制粘贴到新文件中,并首先测试我是否无法重现问题。带问号的单词与所有其他单词的打印方式相同。tbh甚至不知道为什么我打开了shopt-s nullglob。我写的很多脚本都是从一些剪贴的地方复制粘贴的。我刚学会拼写检查。。。我有很多问题。谢谢你的信息和帮助!建议的解决方案存在一个小问题-对于输入文件中有以“-”开头的行的情况,这可能会激活任何
echo
命令行选项(例如,“-e”)。考虑使用“Prtff”%s \n“$行”代替。太糟糕了
echo
不支持
--
标记选项结束,这是指示选项结束的常用方式。
$ shopt -s nullglob
$ var='question?'

$ echo "$var"
question?

$ echo $var
(blank line)
$ touch questions question2

$ echo $var
question2 questions