Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用大括号引用git修订/引用失败_Git_Shell_Zsh - Fatal编程技术网

使用大括号引用git修订/引用失败

使用大括号引用git修订/引用失败,git,shell,zsh,Git,Shell,Zsh,我正在尝试从存储中签出单个文件: git checkout stash@{0} -- some/file 此操作失败,原因是致命:引用无效:stash@0 看起来花括号被去掉了,但我不确定是谁干的 藏匿修订就在那里git存储列表返回 stash@{0}: WIP on X stash@{1}: WIP on Y 我在zsh上使用git1.9.1 有没有办法防止这种大括号消除?通常最好引用包含{…}序列的字符串(例如,git checkout'stash@{0}'…),因为它们会受到限制。 (

我正在尝试从存储中签出单个文件:

git checkout stash@{0} -- some/file
此操作失败,原因是
致命:引用无效:stash@0

看起来花括号被去掉了,但我不确定是谁干的

藏匿修订就在那里<代码>git存储列表返回

stash@{0}: WIP on X
stash@{1}: WIP on Y
我在zsh上使用git1.9.1


有没有办法防止这种大括号消除?

通常最好引用包含
{…}
序列的字符串(例如,
git checkout'stash@{0}'…
),因为它们会受到限制。
(或者,在这个问题上,用单引号引用任何要保留原样的字符串文字。)


但是,在默认
zsh
环境中,这不会是一个问题,因为
{0}
不是有效的大括号表达式,因此只是按原样打印(同样适用于
bash
dash
ksh
);核实:

echo stash@{0}  # prints as is in bash, dash, ksh, zsh (with default options in effect)
值得称赞的是,怀疑可能设置了
brake\u CLL
zsh
选项,这确实会产生症状:

$ setopt BRACE_CCL
$ echo stash@{0}
stash@0          # !! braces removed
正如切普纳所说,
brake_CCL
“导致
{0}
被视为包含一个字符的字符类,而不是按字面意义处理”;换句话说:
BRACE\u CCL
展开
{…}
中的每个字符(例如,
回显a{01}
->
a0 a1
),只需指定一个字符,净效果就是移除封闭的大括号


正如OP本人所确认的那样,
unsetopt BRACE_CCL
解决了这个问题。

通常最好用
{..}
序列引用字符串(例如,
git checkout'stash}“…
,因为它们可以被解释为大括号扩展。然而,在
zsh
中,我不认为这是问题的根源,因为
{0}
不是有效的大括号表达式,因此只是按原样打印;请使用
打印隐藏{0}
验证。您的环境中是否有可疑内容?(输出$env)
{0}
也不是bash的有效大括号扩展。您的shell中似乎设置了
brace\u CCL
选项,这会导致
{0}
被视为一个包含一个字符的字符类,而不是字面意义上的字符。很好的发现,谢谢切普纳,
unset-opt-BRACE\u-CCL
永久修复了它。必须是YADR中的一些预设。我的荣幸;感谢@chepner解决了这个谜团。我需要做些事情来弥补我之前答案的火车失事:)