String awk中的Shell脚本非硬编码字符串

String awk中的Shell脚本非硬编码字符串,string,bash,shell,awk,String,Bash,Shell,Awk,因此,为了编写特定用户的所有进程,我尝试使用以下代码: ps aux --sort -rss | awk '$1 == "$(whoami)"' 当我把我的用户名硬编码到里面时,它工作得非常好。 另外,我尝试用“”、//和空格替换“”,但它无论如何都不起作用。下面的awk可能会对您有所帮助(根据OP的方法) ps-u$(whoami)-o用户、pid、%cpu、%mem、vsz、rss、tty、stat、start、time、comm--sort-rss 如果没有awk我建议引用$(whoam

因此,为了编写特定用户的所有进程,我尝试使用以下代码:

ps aux --sort -rss | awk '$1 == "$(whoami)"'
当我把我的用户名硬编码到里面时,它工作得非常好。
另外,我尝试用“”、//和空格替换“”,但它无论如何都不起作用。

下面的
awk
可能会对您有所帮助(根据OP的方法)

ps-u$(whoami)-o用户、pid、%cpu、%mem、vsz、rss、tty、stat、start、time、comm--sort-rss


如果没有
awk

我建议引用
$(whoami)
子shell,用户名可能包含一个空格或IFS中的其他字符,这会破坏命令。@Aaron,当然,通常我会这样做。我现在已经编辑过了。在
awk
的变量中。在这个特定场景中,这似乎不太可能
whoami
应返回单个令牌。但是正确的引用不会有什么坏处,并且可以使示例很容易地适应重要的场景。@Aaron虽然引用不是bash任务所必需的,但在这种情况下,它是非常推荐的。@down voter,请添加down voting的原因。如果您不提及其原因,则会让人泄气:(事实上,修复是为了解释错误:您的
awk
命令用单引号括起来。这对于
$1
来说是一件好事,它不应该由bash扩展,而应该由
awk
处理。然而,这对
$(whoami)来说是件坏事
,它应该通过
bash
扩展到您的用户。发布的(更好的)解决方案的另一个替代方案是
。\124; awk“\$1==$(whoami)”
,其中
$1
$
被转义,这样它就不会被解释为变量,而子shell被扩展。
ps aux --sort -rss | awk -v who="$(whoami)" '$1==who'