2014-10-31 122 views
2

有什么区别?为什么这些工作:

echo $LOGNAME  #prints username 
echo "$(logname)" #prints username 

但这不是:

echo "$(LOGNAME)" #prints command not found. 
+3

它恰好与'$ LOGNAME'和'$(logname)'输出相同。你可以用'env'看到'$ LOGNAME'这样的环境变量,而'logname'是一个你可以通过'man logname'获得信息的命令。 – fedorqui 2014-10-31 10:08:38

+0

@fedorqui:你的意思是'$ LOGNAME'有时可以不同于'$(logname)'? – mrdaliri 2014-10-31 10:12:48

+2

它可以不同,因为你可以为你设置'LOGNAME'。试试看:'LOGNAME = blblbl;回声“$ LOGNAME”'。 – 2014-10-31 10:16:39

回答

4

logname是一个命令。
LOGNAME是一个变量。

$(logname)因为存在logname命令。
$(LOGNAME)尝试运行不存在的命令LOGNAME

阅读following useful guide

4

$LOGNAME是一个变量。 logname是一个命令。当你做

echo $LOGNAME 

你是呼应变量,而当你做

echo "$(logname)" 

您回荡在执行命令的结果。正好是输出结果相同的情况。

如果你做env | grep LOGNAME,你会看到$LOGNAME是一个环境变量,如果你做which logname你会看到可执行文件的路径。但是,如果你做which LOGNAME,你会看到没有输出。 echo $?显示该命令的退出状态为1,这意味着不能找到可执行文件。

巧合的是,你可以用$PWDpwd做同样的事情。

相关问题