标签: brace-expansion

什么时候使用大括号扩展?

我了解什么是大括号扩展,但我不知道如何最好地使用它。

你什么时候使用它?
如果你有自己的小窍门,请教我一些方便和出色的例子。

shell bash ksh zsh brace-expansion

57
推荐指数
5
解决办法
2万
查看次数

如何使用大括号扩展创建带有前导零的序列

当我使用以下内容时,我得到了预期的结果:

$ echo {8..10}
8 9 10
Run Code Online (Sandbox Code Playgroud)

如何以简单的方式使用此大括号扩展以获得以下输出?

$ echo {8..10}
08 09 10
Run Code Online (Sandbox Code Playgroud)

我现在认为这可以使用seq(没有尝试)获得,但这不是我想要的。

有用的信息可能是我仅限于这个 bash 版本。(如果您有zsh解决方案,但没有bash解决方案,也请分享)

$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-suse-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

bash brace-expansion arithmetic

54
推荐指数
4
解决办法
8万
查看次数

如何在序列的 shell 括号扩展中使用 $variable?

我想$var in在 bash 中使用带有范围的 shell 括号扩展。简单地放置{$var1..$var2}不起作用,所以我去了“横向”......

以下工作,但它有点笨拙。

# remove the split files
echo rm foo.{$ext0..$extN} rm-segments > rm-segments
source rm-segments
Run Code Online (Sandbox Code Playgroud)

有没有更“正常”的方式?

shell bash brace-expansion

46
推荐指数
2
解决办法
2万
查看次数

`a[bc]d`(括号)和 `a{b,c}d`(括号)有什么区别?

a[bc]d和 和有a{b,c}d什么区别?为什么人们a{b,c}d在已经有的时候使用a[bc]d

brace-expansion pattern-matching

28
推荐指数
2
解决办法
3262
查看次数

以正确的顺序将大量文件集中在一起

我有大约 15,000 个名为file_1.pdbfile_2.pdb等的文件。我可以通过执行以下操作来按顺序对其中的几千个文件进行分类:

cat file_{1..2000}.pdb >> file_all.pdb
Run Code Online (Sandbox Code Playgroud)

但是,如果我对 15,000 个文件执行此操作,则会出现错误

-bash: /bin/cat: Argument list too long
Run Code Online (Sandbox Code Playgroud)

我已经看到通过这样做解决了这个问题,find . -name xx -exec xx但这不会保留文件加入的顺序。我怎样才能做到这一点?

find brace-expansion files cat

25
推荐指数
3
解决办法
1万
查看次数

以“相反的顺序”应用大括号扩展

例如{a..c}{1..3}扩展为a1 a2 a3 b1 b2 b3 c1 c2 c3.

如果我想打印a1 b1 c1 a2 b2 c2 a3 b3 c3,有没有类似的方法来做到这一点?最简单的方法是什么?

bash brace-expansion

22
推荐指数
3
解决办法
1380
查看次数

bash:使用变量存储 stderr|stdout 重定向

有没有办法通过变量重定向 stdout 和 stderr,比如在脚本中添加命令选项?

例如我有一个脚本:

#!/bin/bash -x
TEST=">/dev/null 2>&1"
OPT='-p -v'
mkdir $OPT 123/123/123 $TEST
Run Code Online (Sandbox Code Playgroud)

我可以看到 OPT 被替换为-p没有任何问题,bash 将其解释为选项。但重定向解释为目录名称。

$ ./test.sh 
+ TEST='>/dev/null 2>&1'
+ OPT='-p -v'
+ mkdir -p -v 123/123/123 '>/dev/null' '2>&1'
mkdir: created directory `123/123'
mkdir: created directory `123/123/123'
mkdir: created directory `>/dev'
mkdir: created directory `>/dev/null'
mkdir: created directory `2>&1'
Run Code Online (Sandbox Code Playgroud)

有什么办法可以说 bash,$VAR 是重定向,而不是目录名称。

附注。可能是我走错了路,但我想从我的脚本中制作可选的详细或非详细输出。但是即使在非详细模式下我也需要一些输出,因此我不能只重定向整个 stdout 和 stderr,只能从脚本中的某些命令重定向。

bash io-redirection brace-expansion stdout

20
推荐指数
2
解决办法
2万
查看次数

Bash 中的嵌套括号扩展之谜

这个:

$ echo {{a..c},{1..3}}
Run Code Online (Sandbox Code Playgroud)

产生这个:

a b c 1 2 3
Run Code Online (Sandbox Code Playgroud)

这很好,但很难解释

$ echo {a..c},{1..3}
Run Code Online (Sandbox Code Playgroud)

a,1 a,2 a,3 b,1 b,2 b,3 c,1 c,2 c,3
Run Code Online (Sandbox Code Playgroud)

这是在某处记录的吗?该猛砸参考并没有提到它(即使它有使用它的例子)。

bash brace-expansion

20
推荐指数
2
解决办法
3094
查看次数

使用大括号(大括号)通过 `mkdir -p` 创建文件夹结构

作为man mkdir状态

   -p, --parents
          no error if existing, make parent directories as needed
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时

mkdir -p work/{F1,F2,F3}/{temp1,temp2}
Run Code Online (Sandbox Code Playgroud)

它创建了一个文件夹结构,这样的work父文件夹,然后F1F2F3子文件夹和temp1以及temp2在三个父文件夹的子文件夹F1F2F3

   work
     -F1
       -temp1
       -temp2
     -F2
       -temp1
       -temp2
     -F3
       -temp1
       -temp2
Run Code Online (Sandbox Code Playgroud)

现在的问题是我想创建temp1,temp2文件夹,只在和F1下,但我对如何编写命令来做我想做的事情感到困惑。F2F3

shell brace-expansion

17
推荐指数
1
解决办法
1万
查看次数

为什么 systemctl\ {restart,status}\ sshd\; 工作?

通过 echo 时上述命令的输出是:

# echo systemctl\ {restart,status}\ sshd\;
systemctl restart sshd; systemctl status sshd;
Run Code Online (Sandbox Code Playgroud)

即使我将输出粘贴到终端,该命令也能工作。但是当我尝试直接运行命令时,我得到:

# systemctl\ {restart,status}\ sshd\;
bash: systemctl restart sshd;: command not found...
Run Code Online (Sandbox Code Playgroud)

我有两个问题..

  1. 这种替换和扩展的方法到底叫什么?(以便我可以研究它并了解有关它的更多信息以及如何正确使用它)。
  2. 我在这里做错了什么?为什么不起作用?

command-line bash brace-expansion

14
推荐指数
3
解决办法
1926
查看次数