任何人都可以帮我解决这个程序的问题吗?
#!/bin/bash
find teste1 > names.lst
find teste2 > names2.lst
result=$(diff -y -W 72 $names $names2)
if [ $? -eq 0]; then
echo "files are the same"
else
echo "files are different"
echo "$result"
fi
它返回以下错误:
diff:缺少操作数
teste.sh:[:missing']'
文件不同
(此处显示空格)
空格是变量“结果”,但为什么不保存2个文件之间的差异?
我正在尝试使用diff来找出这些文件中文本的差异。
答案 0 :(得分:4)
除了区分未定义的变量$ names和$ names2而不是你创建的文件(names.lst和names2.lst)之外,还有一些语法错误:你需要一个方括号周围的空格来执行条件。
#! /bin/bash
find teste1 > names.lst
find teste1 > names2.lst
result=$(diff -y -W 72 names.lst names2.lst)
if [ $? -eq 0 ]
then
echo "files are the same"
else
echo "files are different"
echo "$result"
fi
答案 1 :(得分:2)
teste.sh: [: missing ']'
:您错过了0
变量$name
和$name2
似乎未填充。
但是在最近的bash下执行此操作不需要编写脚本:
result="$(diff -y <(find teste1) <(find teste2))" &&
echo files are the same ||
{ echo files differ; echo $result; }
或
result="$(diff -y <(find teste1) <(find teste2))" &&
echo files are the same || printf "files differ:\n%s" "$result"
这样做的一个主要优点是不需要临时文件。
当然,这可以写成正确并且更具可读性:
#!/bin/bash
files=(
"/path1/teste 1"
"/path2/teste 2"
)
if result="$(
diff -y -W78 <(
find ${files[0]}
) <(
find ${files[1]}
) )"
then
echo "Files are the sames"
else
echo "Files are differents"
echo "$result"
fi