Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash for循环中跳过带有注释(#空格)的行_Linux_Bash_Unix - Fatal编程技术网

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