相关疑难解决方法(0)

为什么 printf 比 echo 好?

我听说printfecho. 根据我的经验,我只能回忆起一个我不得不使用的实例,printf因为它echo无法将一些文本输入到 RHEL 5.8 上的某个程序中,但printf确实如此。但显然,还有其他差异,我想询问它们是什么以及是否有特定情况下何时使用一种与另一种。

echo text-processing printf

635
推荐指数
4
解决办法
27万
查看次数

什么时候需要双引号?

过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。

但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash

% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …

shell bash zsh shell-script quoting

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

如何输出包含斜杠和其他特殊字符的多行字符串?

我想在 bash 脚本完成后输出它。

 /\_/\
( o.o )
 > ^ <
Run Code Online (Sandbox Code Playgroud)

我已尝试以下但所有返回错误。

echo /\\_/\\\n\( o.o \)\n > ^ <
echo  \/\\_\/\\\r\n( o.o )\r\n > ^ <
echo /\\_/\\\n\( o.o \)\n \> ^ <
Run Code Online (Sandbox Code Playgroud)

如何转义这些字符以便 bash 将它们呈现为字符串?

bash shell-script echo escape-characters here-document

23
推荐指数
2
解决办法
7977
查看次数

' 和 " 在命令行 (bash) 上的区别?

我曾经在命令行上交替使用''""(单引号和双引号),但我最近注意到它'$HOME/some/dir'没有扩展,"$HOME/some/dir"而是。我搜索了一下,发现""允许对特殊字符进行一些保护,同时''允许完全保护。那么还有哪些其他字符受保护''和不受保护""

编辑:这些差异可能显着的实际情况是什么?

shell bash special-characters quoting

9
推荐指数
1
解决办法
2723
查看次数

我使用“find -print0”有什么问题?

我对这个实验(在 Bash 中)感到困惑:

$ mkdir 'foo\n'
$ find . -print0 | od -c
0000000   .  \0   .   /   f   o   o   \   n  \0
0000012
Run Code Online (Sandbox Code Playgroud)

如您所见,“find”正确地用空字符分隔输出,但它将目录名称中的换行符转义为“foo\n”,并带有反斜杠“n”。为什么要这样做?我告诉它“-print0”,它说“这允许包含换行符的文件名......被处理查找输出的程序正确解释。” 转义应该是不必要的,因为“\0”是分隔符,而不是“\n”。

find filenames

7
推荐指数
2
解决办法
1214
查看次数

回响着“!” 字符串内部做了一些奇怪的事情

如果我输入:

echo "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

我不知道它的名字,但它提示我输入下一行。你知道这PS2件事。或者,如果您键入echo \并按Enter

为什么?

嗯,我知道这!是一个特殊变量,您可以使用它来引用您的历史记录。

但一旦我使用这个:

echo "Hello, World"!
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的输出。发生了什么事,为什么不能!在内部使用""


感谢您的帮助 :)

bash command-history zsh quoting history-expansion

7
推荐指数
2
解决办法
939
查看次数

ASCII 转义序列和控制字符配对是标准的一部分吗?

转义序列与 ASCII 控制字符有常见的配对,例如 Ctrl-C 和 Ctrl-Z 分别与 ETX 和 SUB 配对。

在维基百科控制代码页面上,有最多的配对,但没有引用的参考。

控制字符和键序列配对是标准的一部分吗?

Linux 和其他操作系统的列表在哪里?

是否有手册页列出了这些配对?

它们纯粹是几十年的不成文约定吗?

参考

terminal posix ascii

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

如何使用 sed 在文件开头附加存储在 shell 变量中的文本?

我在这里找到了有趣的讨论并尝试了给出的解决方案 sed

如何在文件开头插入文本?

/sf/answers/667361551/

它适用于普通文本,但不适用于将文本保存在变量中时。

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

将文本 ( <added text>)添加到文件的开头

wolf@linux:~$ sed -i '1s/^/<added text>\n/' file.txt
wolf@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

有用!

wolf@linux:~$ cat file.txt 
<added text>
1
2
3
wolf@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

但是,当我用变量尝试它时,它不再起作用。

wolf@linux:~$ var='Text 1'
wolf@linux:~$ echo $var
Text 1
wolf@linux:~$ 

wolf@linux:~$ cat file.txt 
1
2
3
wolf@linux:~$ sed -i '1s/^/"$var"\n/' file.txt
wolf@linux:~$ cat file.txt 
"$var"
1
2
3
wolf@linux:~$ 
Run Code Online (Sandbox Code Playgroud)

而不是"$var",我如何调用$varinsed命令的实际值?我使用 GNU sed4.7:

sed (GNU sed) 4.7 Packaged by Debian …
Run Code Online (Sandbox Code Playgroud)

bash sed variable

5
推荐指数
1
解决办法
270
查看次数

如何将包含未闭合引号的文字字符串与 ripgrep 匹配?

我有一个包含一些 python 代码的文件。有一行包含以下内容(包括引号)

'hello "value"'

我想'hello "value"在文件中搜索。注意未封闭的报价。我正在使用带有以下命令的 ripgrep:

rg -F 'hello "value"

上述命令不适用于'hello "value"bash/zsh 中的输入。我想要的只是文字匹配。我已经使用了该标志,F但由于输入字符串中没有关闭引号,它根本不起作用。我还尝试将输入括在单/双引号内,如下所示:

rg -F "'hello "value"" 或者 rg -F ''hello "value"'

上面的方法也行不通。

为什么即使使用F告诉 ripgrep 按原样考虑输入的标志,使用 ripgrep 字面搜索字符串也如此神秘?我如何解决它?

quoting pattern-matching ripgrep

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

将括号符号回显到终端

该命令按预期echo Hello World打印Hello World,但echo Hello (World)生成错误syntax error near unexpected token `('

我知道,支架等(){}[]是令牌和有特殊的含义,那么你如何在“逃避”这些bash脚本?

bash shell-script

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