Linux 如何在bash for循环中跳过带有注释(#空格)的行
使用以下代码:Linux 如何在bash for循环中跳过带有注释(#空格)的行,linux,bash,unix,Linux,Bash,Unix,使用以下代码: #!/bin/bash export LC_ALL=C for input_file in $(<inputflist.txt) do case "$input_file" in \#*) continue ;; esac echo $input_file done 我希望它只打印最后一行bar.txt,但它会打印以下内容: foo.txt bar.txt 正确的方法是什么?这应该可以: while IFS= read -r line; do
#!/bin/bash
export LC_ALL=C
for input_file in $(<inputflist.txt)
do
case "$input_file" in \#*) continue ;; esac
echo $input_file
done
我希望它只打印最后一行bar.txt
,但它会打印以下内容:
foo.txt
bar.txt
正确的方法是什么?这应该可以:
while IFS= read -r line; do
[[ $line =~ ^[[:blank:]]*# ]] && continue
echo "$line"
done < inputflist.txt
,改为使用while循环:
while IFS= read -r line;do
[[ $line =~ ^[[:space:]]*# ]] || echo "$line"
done <file
而IFS=read-r行;做
[[$line=~^[:space:][]*#]| | echo“$line”
做了这件事出了什么问题
for input_file in $(grep -v "^#" inputflist.txt); do
echo $input_file
done
或者干脆
grep -v "^#" inputflist.txt
?[:空格:]
也匹配newlines@anubhava这没有什么区别,是吗?那只是供参考的评论。是的,它不会影响此脚本,因为$line
没有任何换行符。但是,我更喜欢OP的case
语句,而不是[
regex。是的;regex工具允许更通用的表达式。[:blank:]*
在这里是无用的,$line
没有前导空格,它会在这里丢失任何缩进(因为如果设置不正确)。因此,删除正则表达式的该部分将产生相同的结果。没错,谢谢您的评论。它需要在读取之前IFS=
保留空白。解释了第一个的错误。第二个很好。哦,在第一个中,您的引用也被破坏了;
for input_file in $(grep -v "^#" inputflist.txt); do
echo $input_file
done
grep -v "^#" inputflist.txt