我试图在Mac OS X 10.6.4上运行bash中的以下脚本(来自这个问题):
$ export EDITOR='mvim -f -c "au VimLeave * !open -a Terminal"'
Run Code Online (Sandbox Code Playgroud)
唉,我得到的是意想不到的东西:
$ echo $ EDITOR
mvim -f -c"au VimLeave桌面文档下载库电影音乐图片公共站点bin!open -a Terminal"
预期的产出是:
$ echo $ EDITOR
mvim -f -c"au VimLeave*!open -a Terminal"
解决此问题的方法是设置noglob,即set -f在export分配之前立即运行.但是,问题在于这是否是Mac OS X上的预期行为,因为(因为noglob默认情况下未设置,即set +f)或者因为bashMac OS X上存在错误.
bash的版本是:
$ bash --version GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0) Copyright (C) 2007 Free Software Foundation, Inc.
通过第329页的方式可能会有一些帮助A practical guide to Unix for Mac OS X users:"除非设置noglob(第320页),否则shell在遇到不明确的文件引用时执行[路径名扩展] - 包含任何未加引号字符的标记&,?, [, 要么 ].".但是因为*被全局化是在引号内,问题仍然存在:行为是bash的默认设置还是错误?
这只是一种好奇心,但我很感激您的任何想法和意见.
布赖恩
您的EDITOR变量被设置正确.如果执行,您可以看到:
echo "$EDITOR"
Run Code Online (Sandbox Code Playgroud)
看看下面的成绩单:
pax> export EDITOR='mvim -f -c "au VimLeave * !open -a Terminal"'
pax> echo $EDITOR
mvim -f -c "au VimLeave SecretCiaDoc.txt NsaEchelonKeys.txt !open -a Terminal"
pax> echo "$EDITOR"
mvim -f -c "au VimLeave * !open -a Terminal"
Run Code Online (Sandbox Code Playgroud)
你的问题不在于set陈述,而在于你的陈述echo.该set不会扩大*,因为它包含单引号内,但做一个echo不带引号将其展开.
这绝不会影响使用环境变量的程序.
根据您的评论:
这仍然很奇怪:它
*仍然在命令的引号(双引号)内echo.a='abc "*" xyz'; echo $a在bash或dash中我不会扩展; 实际上,它包含引号作为第二个参数.
看这个:
pax> a='abc "*" xyz' ; echo $a
abc "*" xyz
pax> a='abc "* xyz' ; echo $a
abc "* xyz
pax> a='abc " * xyz' ; echo $a
abc " SecretCiaDoc.txt NsaEchelonKeys.txt xyz
pax> touch '"hello' ; a='abc "* xyz' ; echo $a
abc "hello xyz
Run Code Online (Sandbox Code Playgroud)
看看发生了什么.它不是把它"视为特别的东西,只是另一个角色.它为你扩展的原因EDITOR是因为它是独立的.当你使用时"*",它实际上是在尝试扩展开头和结尾的文件"- 你可以在上面的上一个例子中看到它.
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |