我想执行简单的命令
rm -f *.zip or true ; and date
含义我想删除当前路径中的所有zip文件并显示当前日期。无论如何,我想看看日期。即使没有这样的文件。
我会在bash中这样做:
rm -f *.zip || true; date
这就是我的鱼:
更新
阅读文档我发现
事实证明(我无法相信)
我应该将简单的rm -f *.zip
写为
set files *.zip
if count $files > /dev/null
rm -f *.zip
end
我对这样的解决方案非常不满意,
必须有更好的东西
更新 我试过了
rm -f "*.zip"; date
但它没有删除文件,因为没有发生扩展
更新
我虽然将表达隐藏在函数中
function rmf
set files $argv
set quantity (count $files)
if [ $quantity -gt 0 ]
echo "yes";
rm -f $files
else
echo "not enough"
end
end
但问题是rmf函数不被视为计数函数
答案 0 :(得分:3)
这是一个令人沮丧的案例,我同意。 fish的通配符扩展行为几乎总是更好(在bash中尝试touch *.zip
以查明原因)rm
非常重要且烦人的例外。
可能最简单的解决方法是:
set tmp *.zip ; rm -f $tmp ; date
答案 1 :(得分:1)
set files *.zip
set -q files[1]
and rm -f $files
date
答案 2 :(得分:0)
最终命令:
rm -f *.zip ; date
它在鱼2.6中工作正常,当我遇到问题时我使用了鱼2.2。 他们在以后的版本中改变了行为。
还有一些警告:
在日期之前不需要和, 它表现得像&&在bash中它忽略了
是的,它会产生错误,但它确实应该
请参阅此问题https://github.com/fish-shell/fish-shell/issues/683
确切解释原因: