アプリ版:「スタンプのみでお礼する」機能のリリースについて

bash上で
$ echo $str | grep -P '^.*?\\".*?[^\\]"'
というgrepでの最短検索を
$ Result=`echo $Str | grep -P '^.*?\\".*?[^\\]"'`
と変数に設定しようとすると
grep: missing terminating ] for character class
というエラーとなります。

]の前に\を置くとエラーになりません。
  $ Result=`echo $Str | grep -P '^.*?\\".*?[^\\\]"'`

一方、
$ Result=$(echo $Str | grep -P '^.*?\\".*?[^\\]"')
とするとエラーになりません。

バッククォートは文字列の展開にどのように作用するのでしょうか?
2018年7月19日

質問者からの補足コメント

  • どう思う?

    set -x を実行してからgrepすると下記となります。
    展開後の [^\]" は、 \] によって ] が単なる文字に認識されるということでしょうか。

    $ set -x
    $ Result=`echo $Str | grep -P '^.*?\\".*?[^\\]"'`
    ++ grep --color=auto -P '^.*?\".*?[^\]"'
    grep: missing terminating ] for character class


    bashのマニュアルというのは次の部分なんでしょうね。
    When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, `, or \.

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/07/20 20:15

A 回答 (2件)

bashのマニュアル、読みました?


ちゃんと書いてありますよ。

なお
set -x
しておくと、どう展開されるかわかります。
この回答への補足あり
    • good
    • 0

See bash(1).

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!