私はUnix、Linux、OS XのShellプログラミングの第4版を読んでいます。
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様シェル)を使用して同じことを行うもう1つの方法は次のとおりです。
lines=$'one\ntwo'
notを使用すると、$'...'
単にbashに文字列のエスケープコード(改行など)を'...'
解釈するように指示します。\n
答え2
さて、varsに改行を追加する方法はいくつかありますが、実際には次のような質問をしたようです。
新しいプロンプトでは、
- タイプlines=one
- 一重引用符を入力し
'
て[次へ]をクリックします。enter - 入力を待つ「>」プロンプトが表示されます。
- タイプ'とtwo
- enter完了するにはタップします。
もちろん、以下を使用して変数から改行文字を取得できます。
lines=$'one\ntwo' # in bash, zsh
lines=$(printf 'one\ntwo') # in any shell
例えば。さらに解決策が必要な場合はお問い合わせください。