【发布时间】:2019-06-20 14:04:40
【问题描述】:
给定一个文件test.txt,内容为This is a test.,我想提取其内容的子字符串,更具体地说是第二个和第三个字符(hi),使用命令
echo ${$(cat test.txt):1:2}
但是,这会输出第二个和第三个单词 (is a) 而不是单个字符。
我可以的
a=$(cat test.txt)
echo ${a:1:2}
它按预期工作。但我想在一个命令中完成。
有人可以解释这里发生了什么并提供解决方案吗?
编辑:
系统正在运行zsh。
【问题讨论】:
-
在我的机器上(Debian,使用 bash 4.4),这只会给出“错误替换”错误。它可能不会正式工作。一方面,您在第一个表达式的大括号内使用 $(替换),而不是在第二个表达式中。
-
您不能在 Bash 中进行嵌套替换。 unix.stackexchange.com/questions/189426/…
-
对不起,我忽略了系统运行的是 zsh 而不是 bash。
-
@JimDanner 你是对的。显然 zsh 是唯一可以嵌套替换的 shell,但我仍然不明白为什么我的做法会导致观察到的行为。
标签: string substring zsh parameter-expansion