这样的打字要怎么写呢?

这样的打字要怎么写呢?

我正在阅读 Unix、Linux 和 OS X 中的 Shell 编程,第四版。

在P.112中,它展示了这样的例子

$ lines=one'
> 'two
$ echo "$lines"
one
two
$ lines=ones\
> two
$ echo "$lines"
onetwo
$

我被第一句话卡住了。

我尝试的是这样的

jackson@jackson-VirtualBox:~$ lines=one'>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one>two
jackson@jackson-VirtualBox:~$ $lines=one'>'two
one>two=one>two: command not found
jackson@jackson-VirtualBox:~$ lines=one \n '>'two
n: command not found
jackson@jackson-VirtualBox:~$ lines=one' \n>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one \n>two
jackson@jackson-VirtualBox:~$ lines=one'>'two
jackson@jackson-VirtualBox:~$ lines=one'\n>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one\n>two
jackson@jackson-VirtualBox:~$ lines=one\n>two
jackson@jackson-VirtualBox:~$ echo "$lines"
onen

我的问题是:如何打字

$ lines=one'
> 'two

答案1

这被键入为:

lines=one'
'two

即在第一个引号后按下 Enter 键。

因为它位于引号内,所以 bash 将下一个输入行(以结束引号开头)视为上一行的一部分。这>只是 bash 的一个提示,表明它已准备好接受更多输入以继续上一行 - 它并不意味着要键入。

提示符是$PS2变量的值,也称为“辅助提示符字符串”。它用于连续/辅助输入行,而$PS1用于主输入行。尝试declare -p PS1 PS2查看它们在您的系统上的定义 - 人们自定义 PS1 很常见,但自定义 PS2 则很少见(因此它可能默认为>)。

使用现代版本的 bash(以及其他一些类似 bourne 的 shell)执行相同操作的另一种方法是:

lines=$'one\ntwo'

使用$'...'not 只是'...'告诉 bash 解释\n字符串中的转义码(如换行符)。

答案2

好吧,有几种解决方案可以在 var 中添加换行符,但我相信您实际上是在问这个:

在新的提示下,

  1. 类型lines=one
  2. 输入单引号'并按enter
  3. 将出现“>”提示等待您输入。
  4. 类型'two
  5. enter,完成。

当然,您可以使用以下方法在变量中获取换行符:

lines=$'one\ntwo'            # in bash, zsh
lines=$(printf 'one\ntwo')   # in any shell

例如。如果您需要更多解决方案,请询问。

相关内容