在Bash中,变量和函数具有相同的名称是可以的吗?
发布时间:2020-12-15 22:00:52 所属栏目:安全 来源:网络整理
导读:我的?/ .bashrc中有以下代码: date=$(which date)date() { if [[ $1 == -R || $1 == --rfc-822 ]]; then # Output RFC-822 compliant date string. # e.g. Wed,16 Dec 2009 15:18:11 +0100 $date | sed "s/[^ ][^ ]*$/$($date +%z)/" else $date "$@" fi}
我的?/ .bashrc中有以下代码:
date=$(which date) date() { if [[ $1 == -R || $1 == --rfc-822 ]]; then # Output RFC-822 compliant date string. # e.g. Wed,16 Dec 2009 15:18:11 +0100 $date | sed "s/[^ ][^ ]*$/$($date +%z)/" else $date "$@" fi } 据我所知,这很好用.是否有理由避免使用具有相同名称的变量和函数? 解决方法
除了令人困惑之外,它还没关系.此外,它们不一样:
$date=/bin/ls $type date date is hashed (/bin/date) $type $date /bin/ls is /bin/ls $moo=foo $type $moo -bash: type: foo: not found $function date() { true; } $type date date is a function date () { true*emphasized text* } $which true /bin/true $type true true is a shell builtin 无论何时键入命令,bash都会在三个不同的位置查找该命令.优先顺序如下: > shell builtins(帮助) > shell别名(帮助别名) >来自$PATH的哈希二进制文件(先扫描“最左边”文件夹) 变量以美元符号为前缀,这使得它们与上述所有内容都不同.要比较你的例子:$date和date不是一回事.因此,变量和函数的名称实际上并不可能,因为它们具有不同的“名称空间”. 您可能会发现这有点令人困惑,但许多脚本在文件顶部定义“方法变量”.例如 SED=/bin/sed AWK=/usr/bin/awk GREP/usr/local/gnu/bin/grep 常见的事情是在大写字母中输入变量名称.这有两个目的(除了不那么混乱): >没有$PATH 你无法像这样检查: if [ "`which binary`" ]; then echo it's ok to continue.. ;fi 因为如果二进制文件尚未进行哈希处理(在路径文件夹中找到),哪个会给你一个错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |