如果变量存在,一个衬垫添加标志

如果变量存在,一个衬垫添加标志

我正在努力提高我的 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 都支持它。wordvariable:word

如果您出于某种原因希望将其写在一行上,则将其写在一行上:

echo Running:;ps ${user:+-u "$user"}

或者,使用 if-then-else 变体,

echo Running:;if [ -n "$user" ]; do ps -u "$user"; else ps; fi

相关内容