我有一个正在我的OpenSuSE框上工作的Bash脚本,但是当复制到我的Ubuntu框时,无效。该脚本从文件读入。该文件的字段由空格(制表符和空格)分隔。
#!/bin/bash
function test1()
{
while read LINE
do
if [[ $LINE =~ "^$" || $LINE =~ "^#.*" ]] ; then
continue;
fi
set -- $LINE
local field1=$1
local field2=$2
done < test.file
}
test1
test.file包含:
# Field1Header Field2Header
abcdef A-2
ghijkl B-3
似乎有两个问题:
(1)$ field2,带连字符的那个,是空白的
(2)删除以#开头的空行和行的正则表达式
任何人都知道什么是错的?正如我所说,它在OpenSuSE上运行良好。
谢谢, 保罗
答案 0 :(得分:3)
set
尝试
while read field1 field2 dummy
do
if ! test "${field1%%#*}"
then
continue
fi
# do stuff here
done
编辑:使用set
while read -r line
do
if ! test "${line%%#*}"
then
continue
fi
set -- $line
do_stuff_with "$@"
done
答案 1 :(得分:3)
显然,从bash 3.2开始,不应引用正则表达式。所以这应该有效:
#!/bin/bash
while read LINE
do
if [[ $LINE =~ ^$ || $LINE =~ ^#.* ]] ; then
continue;
fi
set -- $LINE
local field1=$1
local field2=$2
done < test.file
编辑:你应该使用Jo So的答案,因为它绝对更清洁。但我正在解释为什么正则表达式失败以及OpenSuse和Ubuntu之间不同行为背后的原因(很可能是不同版本的bash)
答案 2 :(得分:-2)
在我的ubuntu上没有像&#34; =〜&#34; for test
命令。只需使用这个:
if [[ $LINE = "" || ${LINE:0:1} = "#" ]] ; then
continue;
fi