我试图连接子文件夹中的文本文件并尝试:
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1}/book.txt > out$var
然而这没有返回任何东西。因此,尝试添加一个不存在的“subfolder2”
cat ./{mainfolder1,mainfolder2,mainfolder3}/{subfolder1,subfolder2}/book.txt > out$var
这次确实成功了,成功连接了文件。为什么会出现这种情况?
答案1
根据定义,GNU Bash 中的大括号扩展需要一个序列表达式或一系列逗号分隔的值:
要展开大括号的模式采用可选前导码的形式,后跟一系列逗号分隔的字符串或一对大括号之间的序列表达式,后跟可选后记。
你可以阅读手册了解详情。
一些简单的示例:
echo {subfolder1}
{subfolder1}
echo {subfolder1,subfolder2}
subfolder1 subfolder2
echo subfolder{1}
subfolder{1}
echo subfolder{1..2}
subfolder1 subfolder2
答案2
{subfolder1}
评估为{subfolder1}
,因为没有其他选择。代替使用subfolder1
。
答案3
仅当大括号具有逗号分隔的字符串时才会扩展,例如在它们之间指定的 {abc,def} 或范围,例如 {a..e}。
在您的情况下,您可以只编写 subfolder1 而不用大括号将其括起来,因为不需要这样做
cat ./{mainfolder1,mainfolder2,mainfolder3}/subfolder1/book.txt > out$var