我正在编写一个 bash 脚本。
根据这篇原始帖子,我了解到如果 var未设置或为空,c=${a:-b}
可以使用它来设置变量。c
a
我想知道我们是否可以将这种情况扩展到将命令的输出分配给 var。例如,我有一个 bash command some command
,我可以将它分配给c
var
c=$(some command)
但我还想包括如果输出some command
为空的情况,我将另一个默认值分配给 c。
我知道我可以if-else
在 bash 脚本中编写 vanilla,但只是想知道是否有更优雅的方式类似于c=${a:-b}
?
在 zsh 中,您可以执行以下操作:
但是在包括 bash 在内的任何类似 POSIX 的 shell 中,您总是可以这样做:
或者
您确实会丢失退出状态,但您可以将其保存在两个步骤之间的变量中:
您还可以执行以下操作:
$var
设置为如果default
失败cmd
(不管它是否输出某些东西)。请注意,如果
cmd
输出非空但仅包含换行符,则 aftervar=$(cmd)
,$var
仍然为空,因为命令替换会删除所有尾随换行符。bash
还会去除所有 NUL 字符。zsh
保留它们,其他一些外壳会在第一个 NUL 字符之后删除所有内容。yash
阻塞在区域设置中未形成有效字符的字节序列。要
$var
设置为default
仅当cmd
' 的输出为非空时,使用 GNUgrep
(或任何可以处理(而不是修改)非文本输入并且不忽略非定界行的实现),您可以执行以下操作:grep '^'
如果在其输入中找到至少一行的开头(并将其整个输入不受干扰地传递到其输出),则where返回 true。在这种情况下,
cmd
的退出状态将丢失。如果仅输出 NUL 或换行符,$var
则可能最终为空。cmd