我想将Hello World
与hello world
进行比较。结果应该是真的,好像它们是平等的。我在做:
while read line; do
newLine="$newLine$line"
done < $1
newp="Hello World"
if (( ${newp,,}==${newLine,,} )); then
echo "true"
else
echo "false"
fi
当我传递包含以下内容的文本文件时:
#filename: file.txt
hello world
输出似乎是:
./testScript.txt: line 20: 0à»: hello world==hello world : syntax error in expression (error token is "world==hello world ")
+ echo false
我在这里做错了什么?此外,有点无关,有没有办法将file.txt
中的行传递给字符串(newLine)而不执行while
我做过的事情?
答案 0 :(得分:7)
您应该添加逗号并将双括号更改为单括号。 if语句应该是这样的:
if [ "${newp,,}" = "${newLine,,}" ]; then
与此相关的循环......这取决于你想做什么。如果,就像在这种情况下,您想要获取整个文件并将其保存为单个字符串,您可以这样做:
line=$(cat $1)
我建议你只使用你编写的循环,如果你试图逐行解析文件,即添加if语句,使用不同的变量等等。但对于像这样的简单案例,cat
会很好。
答案 1 :(得分:0)
有shell option,nocasematch
,可启用不区分大小写的模式匹配,以便与[[
和case
一起使用。
比较仅以外壳不同的字符串:
$ var1=lowercase
$ var2=LOWERCASE
$ [[ $var1 == $var2 ]] && echo "Matches!" || echo "Doesn't match!"
Doesn't match!
现在启用shell选项并再次尝试:
$ shopt -s nocasematch
$ [[ $var1 == $var2 ]] && echo "Matches!" || echo "Doesn't match!"
Matches!
如果您不希望所有比较不区分大小写,请确保使用shopt -u nocasematch
再次将其关闭。