我能够根据扩展名来 scp 文件,
scp sk@localhost:/home/sk/*.{txt,text} .
但是当我尝试 scp 单个扩展类型时,它失败了,
scp sk@localhost:/home/sk/*.{txt} .
我可以通过删除案例#2中的花括号来解决此错误,
我只是好奇为什么使用花括号会失败,因为只有文件扩展名类型。
答案1
假设你正在使用 bash,文档说:
格式正确的大括号扩展必须包含不带引号的左大括号和右大括号,以及至少一个不带引号的逗号或有效的序列表达式。任何错误形成的大括号扩展都保持不变。
因此,{foo}
这不是一个正确形成的大括号扩展:
$ bash -c 'echo {foo} {foo,bar}'
{foo} foo bar
答案2
您所说的“花括号”通常称为“大括号”,您使用的功能称为“大括号扩展”。 bash 手册页这样记录它:
支撑扩张 大括号扩展是一种可以生成任意字符串的机制。 这种机制类似于路径名扩展,但文件名生成 已不需要存在。要展开大括号的模式采用以下形式 可选的前导码,后跟一系列逗号分隔的字符串 或一对大括号之间的序列表达式,后跟可选的 后记。前导码是包含在每个字符串的前缀 大括号,然后将附言附加到每个结果字符串中, 从左向右扩展。
当您仅在大括号中放置单个扩展时,它不是大括号扩展,因为它与列出的任何格式都不匹配(逗号分隔的字符串或一对大括号之间的序列表达式)。因此,它没有扩展,而是保持不变。