AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[brace-expansion](unix)

Martin Hope
pmor
Asked: 2021-10-21 07:18:34 +0800 CST

bash 大括号扩展:是否可以将另一个列表与初始列表相关联?

  • 2

例子:

$ eval echo "{x,y,z}\ --opt\; "
x --opt; y --opt; z --opt;

假设第二个列表是{1,2,3}并且它的长度等于第一个(初始)列表的长度。

问题:

  1. 制作方法bash:
x --opt 1; y --opt 2; z --opt 3;
  1. 如何bash制作(即从{x,y,z}列表中引用元素):
x --opt x; y --opt y; z --opt z;

单线是优选的。

bash brace-expansion
  • 2 个回答
  • 70 Views
Martin Hope
Mr Ethernet
Asked: 2019-12-14 03:07:20 +0800 CST

使用大括号扩展时如何创建包含空格的文件名?

  • 0

如果这个命令:

touch Test{1..3}.txt

允许我创建:

  • 测试1.txt
  • 测试2.txt
  • 测试3.txt

为了批量创建文件名中包含空格的文件,我需要什么语法?

例如:

  • 测试 1.txt
  • 测试2.txt
  • 测试3.txt

显然,我可以使用引号单独创建带有空格的文件(见下文),但由于某种原因,使用大括号扩展时我似乎无法做同样的事情:

touch "Test 1.txt"

到目前为止,我已经尝试了以下但没有成功:

touch "Test {1..3}.txt"

我的语法有问题,还是大括号扩展无法做到这一点?

bash brace-expansion
  • 2 个回答
  • 388 Views
Martin Hope
iR0Nic
Asked: 2019-08-10 03:34:10 +0800 CST

粘贴和大括号扩展与通配符

  • 2

为什么大括号扩展与通配符结合的行为不同paste?

示例:假设我们有多个文件夹,每个文件夹都包含相同结构的 tsv,并且想要创建一个包含每个文件夹的第 5 行的“all.tsv”。这两个命令的行为不同:

paste -d, <(cut -d$'\t' -f5 {test,test1,test2}/example.tsv) > all.tsv

对比

paste -d, <(cut -d$'\t' -f5 test*/example.tsv) > all.tsv

第一个按预期创建一个具有 3 列的 tsv,第二个创建一个单列 tsv,其值位于彼此下方。

我的问题是文件夹列表任意大,可能很长而且不连续。

有没有一种方法可以实现与使用通配符进行大括号扩展相同的行为,而无需移动到 bash 脚本并迭代文件夹?

使用 GNU bash

wildcards brace-expansion
  • 1 个回答
  • 259 Views
Martin Hope
CcVHKakalLLOOPPOkKkkKk
Asked: 2019-06-20 13:12:16 +0800 CST

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

  • 22

例如{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
  • 8 个回答
  • 1489 Views
Martin Hope
Weijun Zhou
Asked: 2019-04-28 09:35:59 +0800 CST

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

  • 28

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

brace-expansion pattern-matching
  • 2 个回答
  • 3825 Views
Martin Hope
Nikolaos Paschos
Asked: 2019-03-21 02:48:54 +0800 CST

Bash:为什么这个大括号表达式会这样工作?

  • 6

这是一个 bash 4 特定的问题。我对 bash Brace Expressions 有点熟悉,并且我已经阅读了手册,但我不明白它实际上是如何工作的。

我想这与ASCII 表有关,但我不习惯搜索 bash 源代码来确认它,所以我的问题是:

为什么这会echo {G..a}扩展到

G H I J K L M N O P Q R S T U V W X Y Z [  ] ^ _ ` a
bash brace-expansion
  • 1 个回答
  • 379 Views
Martin Hope
syss
Asked: 2019-02-12 03:10:35 +0800 CST

为什么 bash 大括号扩展不适用于命令?

  • 8

为什么这有效:

mkdir /dir/test{1,2,3}

这不是吗?

{chown httpd,chmod 700} /dir/test1
-bash: {chown: command not found

我的 Bash 版本是:GNU bash,版本 4.2.46(2)-release

bash brace-expansion
  • 3 个回答
  • 2491 Views
Martin Hope
De Novo
Asked: 2018-12-05 10:52:20 +0800 CST

为什么波浪号前缀在赋值之前会扩展,而大括号却不会

  • 0

tl;目录

在 bash 中,大括号扩展发生在波浪号扩展之前。但是,波浪号前缀似乎在变量赋值之前扩展,而大括号扩展则没有。为什么?

细节和例子

bash 中的大括号扩展被记录为发生在波浪线扩展之前:

大括号扩展在任何其他扩展之前执行

据我了解,波浪号扩展发生在变量赋值之前,如下例所示:

# UNQUOTED TILDE PREFIX, TILDE EXPANSION EXPECTED
tilde=~
echo "$tilde"
# /Users/DeNovo
[[ $tilde == "$HOME" ]] && echo "literal match"
# literal match

# QUOTED TILDE PREFIX, TILDE EXPANSION DOES NOT OCCUR
lit_tilde='~'
echo "$lit_tilde"
# ~
# UNQUOTED TILDE PREFIX PRODUCED AND EVALUATED, TILDE EXPANSION OCCURS
# AS EXPECTED
eval echo "$lit_tilde"
# /Users/DeNovo
[[ $lit_tilde == "~" ]] && echo "literal match"
# literal match

这些例子似乎表明右操作数left=right在被绑定为左操作数的值之前经历波浪号扩展。

然而,大括号扩展不会发生在变量赋值之前,其行为类似于将文字波浪号绑定到变量(相对于扩展的特殊字符/前缀)

# UNQUOTED BRACE, BUT NO EXPANSION. BRACE LITERAL IS PRESERVED
brace={a..c}
echo "$brace"
# {a..c}
[[ $brace = "a b c" ]] || echo "doesn't match"
# doesn't match
[[ $brace = "{a..c}" ]] && echo "literal match"
# literal match

# SIMILAR TO THE LITERAL TILDE, EVALUATING THE VARIABLE VALUE 
# RESULTS IN BRACE EXPANSION
eval echo "$brace"
# a b c

将这两个扩展合并到一个示例中,您可以看到波浪号扩展发生而大括号扩展没有发生:

combined=~/dir_{a..c}
echo "$combined"
# /Users/DeNovo/dir_{a..c}

大括号防止内部代字号在分配期间扩展

internal_tilde={~,~+}/new_dir
echo "$internal_tilde"
# {~,~+}/new_dir

# vs the same output, not in a variable
echo {~,~+}/new_dir
/Users/DeNovo/new_dir /Your/Working/Directory/new_dir

只是为了澄清,我不是在问如何让变量包含大括号扩展的结果,而是为什么尽管发生在波浪线扩展之前,大括号扩展不会在变量赋值之前发生。有几种方法可以获得所需的行为。这是一个:

# PROCESS SUBSTITUTION GIVES THE DESIRED BEHAVIOR
brace_exp="$(echo {a..c})"
echo "$brace_exp"
a b c
[[ $brace_exp = "a b c" ]] && echo "literal match"
# literal match

再说一遍,为什么波浪号扩展发生在变量赋值之前,而大括号扩展(应该发生在波浪号扩展之前)却没有发生在变量赋值之前。大概分配在某种我不知道的方面是特殊的。

bash brace-expansion
  • 2 个回答
  • 326 Views
Martin Hope
jbrock
Asked: 2018-10-16 13:11:40 +0800 CST

创建字母重复的字母索引

  • 2

我正在运行 Debian 9。在 Bash 中,我可以echo {a..z}使用字母表,或者echo {a..z}{a..z}打印字母组合。但是,我想生成一个索引:a b c detc. then aa bb cc ddetc. then aaa bbb ccc dddetc. 直到它是aaaaa bbbbb(直到zzzzz)。这怎么能用大括号扩展或其他类似方法来完成?谢谢

bash brace-expansion
  • 3 个回答
  • 412 Views
Martin Hope
Neo_Returns
Asked: 2018-05-20 07:25:34 +0800 CST

为什么在 bash {{a,b}.{c,d}} 中扩展为 {ac} {ad} {bc} {bd}

  • 7

在 bash echo {{a,b}.{c,d}} 中扩展为 {a.c} {a.d} {b.c} {b.d} 虽然在 bash 手册中没有提到我所做的输入类型的大括号扩展

我的问题是为什么输出不像这样ac ad bc bd

bash brace-expansion
  • 1 个回答
  • 439 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve