首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >双引号bash脚本linux

双引号bash脚本linux
EN

Stack Overflow用户
提问于 2019-03-19 19:50:48
回答 2查看 57关注 0票数 0

我不明白为什么输出是用户名,因为在第3行和第4行必须打印/usr/bin/whoami。请给我简单的解释

代码语言:javascript
运行
复制
#!/bin/bash

WHEREWHOAMI="`which whoami`"
ROOTORNOT="`$WHEREWHOAMI`"
echo "$ROOTORNOT"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-19 20:00:35

变量ROOTORNOT设置为WHEREWHOAMI执行的输出,这反过来就是命令which whoami的输出。

代码语言:javascript
运行
复制
WHEREWHOAMI=`which whoami`  # <- /usr/bin/whoami
ROOTWHOAMI="`$WHEREWHOAMI`" # <- `/usr/bin/whoami`  # <- username

如果将set -x标志添加到脚本中,您可以很容易地了解到底发生了什么。示例:

代码语言:javascript
运行
复制
$ set -x
$ WHEREWHOAMI="`which whoami`"
++ alias
++ declare -f
++ /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot whoami
+ WHEREWHOAMI=/usr/bin/whoami
$ ROOTORNOT="`$WHEREWHOAMI`"
++ /usr/bin/whoami
+ ROOTORNOT=kvantour
$ echo "$ROOTORNOT"
+ echo kvantour
kvantour
$ 
票数 1
EN

Stack Overflow用户

发布于 2019-03-19 20:15:33

即使在双引号中也会对Backticks进行评估。

(建议--不要用后背。使用$()代替)。)

代码语言:javascript
运行
复制
WHEREWHOAMI="`which whoami`"

这将执行which whoami并将/usr/bin/whoami分配给WHEREWHOAMI

代码语言:javascript
运行
复制
ROOTORNOT="`$WHEREWHOAMI`"

这将在后台执行/usr/bin/whoami,并将用户名结果分配给ROOTORNOT

它做的正是它应该做的。

你不就是这么做的吗?

也许你想要的是-

代码语言:javascript
运行
复制
$: [[ $( $(which whoami) ) == root ]] && echo ROOT || echo not-root
not-root

不过,我确实建议存储这些值并进行比较。你不能就这么用

代码语言:javascript
运行
复制
if [[ root == "$LOGNAME" ]] 
then : ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55248996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档