用下面的代码:
#!/bin/bash export LC_ALL=C for input_file in $(<inputflist.txt) do case "$input_file" in \#*) continue ;; esac echo $input_file done
和inputflist.txt
具有以下内容:
# foo.txt bar.txt
我期望它只是打印最后一行bar.txt
但它打印出来,而不是:
foo.txt bar.txt
什么是正确的方法来做到这一点?
这应该工作:
while IFS= read -r line; do [[ $line =~ ^[[:blank:]]*# ]] && continue echo "$line" done < inputflist.txt
输出:
bar.txt
不要用for来读取行,而是使用while循环:
while IFS= read -r line;do [[ $line =~ ^[[:space:]]*# ]] || echo "$line" done <file
注意:
IFS
,您将失去任何缩进。 怎么了
for input_file in $(grep -v "^#" inputflist.txt); do echo $input_file done
或干脆
grep -v "^#" inputflist.txt
?