加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在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别名(帮助别名)
> 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

因为如果二进制文件尚未进行哈希处理(在路径文件夹中找到),哪个会给你一个错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读