相关疑难解决方法(0)

我如何回显美元符号?

例如,$PATH$HOME

当我输入时,echo $PATH它返回 my $PATH,但我想回显这个词$PATH而不是实际变量代表的内容,echo "$PATH"也不起作用。

shell quoting

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

如何使用 echo 命令和重定向运算符将换行符特殊字符放入文件中?

我想使用 echo 命令和重定向运算符创建一个文件,该文件应该由几行组成。

我试图通过“\n”在字符串中包含一个换行符:

echo "first line\nsecond line\nthirdline\n" > foo
Run Code Online (Sandbox Code Playgroud)

但是这样不会创建三行文件,而是创建一个只有一行和字符串的逐字内容的文件。

如何仅使用此命令创建多行文件?

command-line shell echo newlines

56
推荐指数
3
解决办法
15万
查看次数

转义变量以用作另一个脚本的内容

这个问题不是关于如何编写正确转义​​的字符串文字。我找不到任何与如何转义变量以在脚本或其他程序中直接使用的相关问题。

我的目标是使脚本能够生成其他脚本。这是因为生成的脚本中的任务将在另一台机器上运行 0 到n次,并且生成它们的数据在运行(再次)之前可能会发生变化,因此直接通过网络执行操作将不行。

给定一个可能包含特殊字符(例如单引号)的已知变量,我需要将其写为完全转义的字符串文字,例如,foo包含的变量bar'baz应出现在生成的脚本中:

qux='bar'\''baz'
Run Code Online (Sandbox Code Playgroud)

这将通过附加"qux=$foo_esc"到其他脚本行来编写。我是这样使用 Perl 做到的:

foo_esc="'`perl -pe 's/('\'')/\\1\\\\\\1\\1/g' <<<"$foo"`'"
Run Code Online (Sandbox Code Playgroud)

但这似乎有点矫枉过正。

我单独使用 bash 没有成功。我已经尝试了这些的许多变体:

foo_esc="'${file//\'/\'\\\'\'}'"
foo_esc="'${file//\'/'\\''}'"
Run Code Online (Sandbox Code Playgroud)

但是输出中会出现额外的斜杠(当我这样做时echo "$foo"),或者它们会导致语法错误(如果从 shell 完成,则需要进一步的输入)。

bash variable-substitution variable bash-expansion

38
推荐指数
5
解决办法
9万
查看次数

旧的刻度与括号问题:困惑

由于多年前被纠正,我从反引号切换到 $() 以进行命令扩展。

但我还是更喜欢反引号。它是更少的击键并且不涉及Shift键。

我知道括号更可取,因为它不太容易出现反引号容易出现的错误,但是规则从不使用反引号的原因是什么?

shell bash command-substitution

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

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

我想在 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
查看次数

如何转义字符串中的特殊字符?

假设$file持有一个文件名的值,比如Dr' A.tif. 在 bash 编程中,如何在$file不删除特殊字符的情况下转义单引号和任何其他特殊字符?

2014 年 7 月 9 日更新

根据@Gilles 的请求,以下代码片段无法处理Dr' A.tif

files=$(find /path/ -maxdepth 1 -name "*.[Pp][Dd][Ff]" -o -name "*.[Tt][Ii][Ff]")
echo "${files}" > ${TEMP_FILE}
while read file
do
   newfile=$(echo "${file}" | sed 's, ,\\ ,g') ## line 1
done < ${TEMP_FILE}
Run Code Online (Sandbox Code Playgroud)

在我尝试了@Patrick on的答案后line 1,它似乎对我有用。但是,如果我有诸如Dr\^s A.tif,printf命令之类的文件,它似乎没有帮助,它会向我显示Dr\^s\ A.tif. 如果我像这样在控制台上手动尝试:

printf "%q" "Dr\^s A.tif"

我会有这个输出:

Dr\\\^s\ A.tif

知道如何处理吗?

bash

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

哪些字符需要在没有引号的文件中转义?

我有基于浏览器的 shell/终端来执行 bash 命令,我正在转义空格,但事实证明括号也需要转义。对于不在引号中的文件名,还需要对哪些其他字符进行转义?

shell bash filenames quoting

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

如何删除以“$”开头的文件夹?

我创建了一个名为“$pattern”的目录,现在每当我尝试删除它时,它都会说

模式:未定义的变量。

我试过了:

$ rm -r $pattern
$ rm -rf $pattern
$ rm "$ option[value='2016']"
Run Code Online (Sandbox Code Playgroud)

shell filenames quoting

11
推荐指数
2
解决办法
6357
查看次数

使用 printf 命令时需要转义哪些字符?

我想澄清一下,我不是在谈论如何在解释的 shell 级别上转义字符。

据我所知,只需要转义两个字符:%\

要打印文字%,您必须使用前面的 将其转义%

printf '%%'
Run Code Online (Sandbox Code Playgroud)

要打印文字,\您必须使用前面的 将其转义\

printf '\\'
Run Code Online (Sandbox Code Playgroud)

是否有任何其他情况我需要转义字符才能按字面意思解释?

shell posix printf

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

使用反斜杠或单引号进行字段分隔

我一直使用单引号进行字段分隔,例如: awk -F';' ...

对我来说很新的是使用反斜杠的方式,如: awk -F\; ...

两者是否存在技术差异,还是只是偏好问题?

shell awk quoting

4
推荐指数
1
解决办法
423
查看次数