我不明白为什么输出是用户名,因为在第3行和第4行必须打印/usr/bin/whoami。请给我简单的解释
#!/bin/bash
WHEREWHOAMI="`which whoami`"
ROOTORNOT="`$WHEREWHOAMI`"
echo "$ROOTORNOT"发布于 2019-03-19 20:00:35
变量ROOTORNOT设置为WHEREWHOAMI执行的输出,这反过来就是命令which whoami的输出。
WHEREWHOAMI=`which whoami` # <- /usr/bin/whoami
ROOTWHOAMI="`$WHEREWHOAMI`" # <- `/usr/bin/whoami` # <- username如果将set -x标志添加到脚本中,您可以很容易地了解到底发生了什么。示例:
$ 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
$ 发布于 2019-03-19 20:15:33
即使在双引号中也会对Backticks进行评估。
(建议--不要用后背。使用$()代替)。)
WHEREWHOAMI="`which whoami`"这将执行which whoami并将/usr/bin/whoami分配给WHEREWHOAMI。
ROOTORNOT="`$WHEREWHOAMI`"这将在后台执行/usr/bin/whoami,并将用户名结果分配给ROOTORNOT。
它做的正是它应该做的。
你不就是这么做的吗?
也许你想要的是-
$: [[ $( $(which whoami) ) == root ]] && echo ROOT || echo not-root
not-root不过,我确实建议存储这些值并进行比较。你不能就这么用
if [[ root == "$LOGNAME" ]]
then : ...https://stackoverflow.com/questions/55248996
复制相似问题