【发布时间】:2018-12-11 11:21:48
【问题描述】:
我有一个要传递给 MyShell 的 bash 测试数组,然后将相同的命令传递给 bash,并验证输出。当前脚本在项目的早期迭代中运行良好,并帮助我发现了许多错误和错误。
但是,我的程序是故意的(这是功课,但 bash 脚本不是)
在新行上打印 (True) 或 (False)。除此之外,输出是相同的。
您能帮我使用(可能各一行)语法从变量 outputMyShell 中删除与“(True)”或“(False)”匹配的所有行吗?
编辑:这里有 3 个例子。
输入:(echo 1 && echo 2) || (回声 3 && 回声 4)
MyShell 输出:“1
2"
Bash 输出:“1
2"
测试通过
输入:test -e src/
MyShell 输出:“(真)”
Bash 输出:""
测试失败
输入:test -f src/
MyShell 输出:“(假)”
Bash 输出:""
测试失败
for ((i = 0; i < ${#INPUTS[@]}; i++))
do
echo -e "\nInput: ${INPUTS[$i]}"
outputMyShell=$(./Myshell ${INPUTS[$i]})
eval $(rm -rf bashCreatedDirectory)
outputBash=$(eval ${INPUTS[$i]})
#echo -e "MyShell Output: \"${outputMyShell}\""
#echo -e "Bash Output: \"${outputBash}\""
if [ "${outputMyShell}" = "${outputBash}" ]
then
tput setaf 6;
echo -e "Test passed"
else
tput setaf 1;
echo -e "Test failed"
fi
tput sgr0;
done
【问题讨论】:
-
你能把你的问题简单概括一下吗?该脚本似乎与问题不太相关,并且缺少
outputMyShell的相关内容。如果我理解正确,您有两个变量并想比较它们但忽略(包含的行?)True或False。如果您给出明确的示例说明何时应将两个字符串视为相同和不同,将会有所帮助。 -
各种
eval行是怎么回事?你似乎把事情复杂了一个数量级。 -
您尝试了哪个
sed命令,它是如何失败的?为什么无论如何都需要输出到变量中? -
@Socowi 没错,一个变量存储我和我的伙伴正在编写的 shell 的输出,而另一个存储常规 Bash 的输出,给定相同的输入。它们应该是相同的,但对于 (True) 和 (False),所以我实际上并不关心我是编辑字符串还是比较它们,同时以某种方式忽略 (True) 和 (False) 行。
-
您不需要
eval或命令替换来删除目录;rm -rf bashCreatedDirectory就足够了。