linux bash命令会执行哪些文件名,linux – Bash内置命令的“a = b”类参数中的文件名扩展...

我已经了解到,在

Bash中运行命令时,在命令执行之前完成文件名扩展.但是在尝试下面的命令时(使用-x选项):

touch foo=3 # Create a file with name "foo=3"

+ touch foo=3

declare foo=?

+ declare 'foo=?'

alias foo=*

+ alias 'foo=*'

我得不到我的期望,因为foo =?并且foo = *未扩展为文件名“foo = 3”:

declare -p | grep 'foo=' # => foo='?'

alias | grep 'foo=' # => alias foo='*'

但是如果我运行另一个类似cd的内置函数或接受赋值作为自己编写的参数的函数,如show_rhs(){echo“${1%= *} =’${1#* =}’”;我得到了我期望的东西(foo =?和foo = *被扩展).

cd foo=? # => foo=3: Not a directory

show_rhs() foo=* # => foo='3'

我在这里看到的唯一区别是declare和alias是内置函数并接受赋值作为参数.根据-x选项的输出,似乎添加了一对引用以在文件名扩展之前包含赋值.

但是如果文件名扩展在命令执行之前运行而不管命令是什么,那么传入declare和alias的参数应该是foo = 3而不是foo =?和foo = *由于存在文件“foo = 3”.

那么Bash在文件名扩展之前根据命令做一些特殊的事情(可能引用通配符?)到“a = b”类似的参数?

(我的环境:CentOS 5.8 64bit,GNU Bash 3.2.25)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值