如何将命令的输出作为变量传递到 bash 脚本中?

如何将命令的输出作为变量传递到 bash 脚本中?

我试图将 awk 命令的输出作为 bash 脚本中的变量传递,但没有取得太大成功,因此如能得到任何帮助我都会感激不尽。

homedirectory=$(awk /stephen/ /etc/passwd | awk -F/home/ '{print $2}' | awk -F/downloads '{print $1}')

echo '$homedirectory'

我想从/etc/passwd中提取用户stephen的主目录,所以我想要的结果是0001

/etc/passwd

statd:x:102:65534::/var/lib/nfs:/bin/false

bind:x:103:106::/var/cache/bind:/bin/false

sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin

mysql:x:105:107:MySQL Server,,,:/var/lib/mysql:/bin/false

messagebus:x:106:108::/var/run/dbus:/bin/false

stephen:x:1039:1031::/home/0001/downloads:/bin/false

答案1

别看/etc/passwdecho ~username,在你的情况下echo ~stephen会做你想做的事。

从你的/etc/passwd结果来看

$ echo ~stephen
/home/0001
$ basename `echo ~stephen`
0001

编辑:这是在编辑对您的/etc/passwd内容应用正确格式之前。我没有注意到主目录是/home/0001/downloads。您所要求的是一个并不总是会产生一致结果的东西,除非您始终期望被检查用户的主目录位于/home。有无数种方法可以做到这一点,大多数方法都会有些错误,除非您提供有关预期约束的信息。

无论如何,请将过滤应用于 的输出echo ~username。此后,您可以使用各种实用程序,例如basenameawksedcut等。

答案2

废弃已有资源并使用:

getent passwd stephen | cut -d: -f6

甚至

cd ~stephen && pwd

答案3

您的三个 awk 起作用了(尽管正如其他人所说,它本来可以做得更好)。

最后一个问题是,echo '$homedirectory'因为echo "$homedirectory"shell 查看双引号内而不是单引号内。

相关内容