当我在可执行脚本文本文件中使用echo $’hi\nhi’ > /etc/list.list时,我在Kali Linux2020.4 Live上创建了多个命令:
$,同时消失2 ’’符号。hi的S分开,而只是显示\n而没有任何分离。但是,当我在可执行文件或普通终端之外使用相同的命令时,它可以工作。
Kali 2020.4是否从2020.3改为不允许我在可执行文本文件中使用回波格式,因为它用于完美地工作?我是否还可以为echo使用其他命令,以便在1行命令中创建新行?
发布于 2021-02-22 18:33:44
您的命令有许多问题,幸运的是,它们都很容易解决:
’不是在伯恩再一次 (又称"BASH",Kali上的默认shell解释器)中分隔字符串的有效字符。需要用单引号(')或双引号(")替换它。以下是关于在BASH中引用的一些很好的信息。echo”,但没有提供-e标志。$)这一事实,您似乎正在尝试执行"参数展开“或(如斯蒂尔·德里弗在注释中所指出的)来创建ANSI引号。根据ANSI引用的GNU BASH文档:
格式$'string‘的单词将被特别处理。单词展开为字符串,反斜杠转义字符替换为ANSI C标准指定的字符。反斜杠转义序列,如果存在,则被解码。
对转义序列的理解是这个答案的重要区别。您可以选择在何处发生shell扩展:在运行echo的阶段或在使用ANSI引用时。之所以做出这种区分,是因为在某些情况下,必须在echo之外指定这些类型的扩展才能达到预期的效果。经过进一步思考,我记得awk是我看到这个问题出现的一个工具:
总的来说,我还会回顾BASH黑客wiki的"新手陷阱-变量“部分,特别是关于”设置变量“和”扩展(使用)变量“的子部分。
这些是BASH本身的基本语法问题,不会受到对Kali的小版本更新的影响。
编辑:增加了3a/3b的细目,以包含来自斯蒂尔·德里弗's评论的信息。
https://unix.stackexchange.com/questions/635845
复制相似问题