我正在努力提高我的 bash 知识并使我的代码更有组织性
我在这里想做的是仅当变量存在时才将标志 -u 与变量 $user 添加,否则不要提及 -u 标志。
这是我尝试做的
echo "Running: ps if [[ -n "$user"]]; then -u $user fi | wc -l"
如果 $user 存在,它将打印 $user 拥有的进程数量
但是,如果 $user 不存在,则仅显示所有用户的进程量
重要的是要注意,我需要这样(在回声内)
答案1
我不会使用echo
输出变量数据,因为在这种情况下没有必要,并且echo
在某些情况下也可能会修改数据(请参阅为什么 printf 比 echo 更好?)。它也不太优雅,因为您需要命令替换,因此需要 shell 暂时保存ps
内存中的输出。
相反,我可能会编写这样的代码以使其可读:
echo Running:
if [ -n "$user" ]; do
ps -u "$user"
else
ps
fi
或者,如果您想开始将其压缩成更多不可读的块,
echo Running:
ps ${user:+-u "$user"}
如果变量已设置且不为空,则扩展${variable:+word}
将扩展为。删除to 仅在设置变量时扩展至(但可能为空)。这种扩展是标准的,因此任何类似 POSIX 的 shell 都支持它。word
variable
:
word
如果您出于某种原因希望将其写在一行上,则将其写在一行上:
echo Running:;ps ${user:+-u "$user"}
或者,使用 if-then-else 变体,
echo Running:;if [ -n "$user" ]; do ps -u "$user"; else ps; fi