我想创建一个外壳文件,查找文件是Unix还是Dos文件类型。使用IF查询时,我想在检查文件是否需要使用“ dos2unix”进行转换后做出决定。我知道命令“ FILE”,但是返回值不是BOOLEAN数据类型,它是一个字符串。
那么如果文件是UNIX文件类型,有什么方法可以将BOOLEAN位设置为true吗?
预先感谢...!
答案 0 :(得分:1)
您可以解析fn test_a(a : &TraitA){
a.say_hello();
}
fn test_b(b : &TraitB){
b.say_hello();
}
fn main() {
let c: Box<dyn TraitC> = Box::new(MyType{});
TraitA::say_hello(&*c);
TraitB::say_hello(&*c);
c.as_trait_a().say_hello();
c.as_trait_b().say_hello();
test_a(c.as_trait_a());
test_b(c.as_trait_b());
let a : &dyn TraitA = c.as_trait_a();
a.say_hello();
let b : &dyn TraitB = c.as_trait_b();
b.say_hello();
}
命令的输出。对于具有\ n行尾的文本文件,其输出file
,而对于具有\ r \ n行尾的文本文件,其输出ASCII text ...
。请注意,根据实际的文件内容,可能会有其他信息代替“ ...”。因此,您可以做类似
ASCII text ... with CRLF line terminators
如果文件将YOURFILE判断为带有CRLF结尾的文本文件,则变量file YOURFILE | grep -q '^ASCII text.*with CRLF'
((is_dos_text_file=1-$?))
包含值1。如果YOURFILE具有Unix行结尾,或未被判断为文本文件,则为0。
更新:我刚刚注意到您在帖子中使用了 shell 标记,因此搜索了Posix Shell解决方案。在这种情况下,无法使用is_dos_text_file
构造,而您必须做类似的事情
((...))
获得相同的效果。
答案 1 :(得分:0)
您可以将文件转换为Unix文件,然后检查它是否仍然相同。在这种情况下,它是一个Unix文件。否则,它是DOS文件。
echo unix > unix-file
echo dos | unix2dos > dos-file
for file in {dos,unix}-file; do
if cmp -s $file <(dos2unix < $file); then
echo $file is a unix file
else
echo $file is a dos file
fi
done