スクリプトに改行文字がどのように表示されると予想しますか?

スクリプトに改行文字がどのように表示されると予想しますか?

次の対話型スクリプトを検討してください。

#!/usr/bin/env bash
set -eu
while true; do
    read -p '> '
    if [ "$REPLY" == quit ]; then
        break
    fi
    echo "'$REPLY'"
done

expect今私はそれと対話したいと思います:

#!/usr/bin/env bash
set -eu
echo '
    spawn ./1.sh
    expect >
    send cmd1\n
    expect {\n> }
    send quit\n
' | expect -d

しかし、実行すると、次のように表示されます。

...
expect: does " cmd1\r\n'cmd1'\r\n> " (spawn_id exp6) match glob pattern "\n> "? no
expect: timed out
send: sending "quit\n" to { exp6 }

なぜ一致しないのですか?新しいプロンプト(コマンド完了)の出現をどのように検出しますか?

ベストアンサー1

言語では、expect tcl文字列の使用と引用には違いがあります。次の2つの例でこれを確認できます。""{}

$ expect -c 'puts "a\nb"'
a
b
~ $ expect -c 'puts {a\nb}'
a\nb

globパターンは、一致{\n> }するが\n特別にエスケープされたと解釈されない4つの文字で構成されています。パターンを使用すると、"\n> "一致が機能します。あるいは、デフォルトのglobパターンの代わりにフラグを使用する-reこともでき、両方の文字は正規表現コードによってエスケープ文字として解釈されます-re {\n> }

おすすめ記事