今天我正在编写一些Bourne Shell代码,我想运行Acommand,收集其输出(如果有的话),并查看是否Itsucceeded。我的标准表格是:
(我可以使用管道来处理命令和#39; s输出,但是可能有理由捕获输出。在我故意下,我想处理任何输出命令marcoduce,如果它报告它失败了。 )
当我通过shellcheck运行我的脚本时(正如我总是这样做的时间),它报告了SC2181,即toquote:
这是第一次和#39;第一次和#39; ve看过SC2181,一如既往地,我的眼睛是因为它看起来很明显错误,因为当然是可以将这两条线合并在一起。但这一次我去了扑灭了扑灭的存储库,将其作为一个问题报告,并将其报告为我做一个搜索的问题,这是在idiscovered那个shellcheck没有错的时候。
令我惊讶的是,Bourne shell允许您执行命令使用命令,并在IfExpressions中捕获变量中的输出。你真的可以在一个单一的一行中写下我的两行:
如果您愿意,但是,您甚至可以将变量设置为普通值,但是#39; var = $ value'通常或始终具有0的退出状态,所以它'鼻涕非常有用,可以在IF表达式中放置。
尽管有这种转变,但我选择不在MyCase中执行它,因为我的命令替换是一个相当长的命令。谢谢的意见,它与编写的可读性一样错误:
在这两种情况下,如果你把它放在两条线,而不是试图在一行上堵塞所有东西,事情都更具可读性和清晰。 bourneshell应该写出我最初的方式,而c应该是: 只是因为你可以在一条线上堵塞两件事,你应该在一条线上。 有时它'在一行中更清晰,有时是ISN' t。 (当然是理想情况下,您将' t对CFunct呼叫有这么多的参数。不幸的是,长命令行可以是不可避免的shell脚本,因为某些命令具有非常详细的选项。)