GNU/Linux >> Linux の 問題 >  >> Linux

bash:特殊文字を含むコマンドライン引数を渡す方法

次のいずれかを実行できます:

<オール>
  • それぞれの特殊記号をバックスラッシュでエスケープします (\[abc\]_\[x\|y\] のように) )または
  • 引数全体を二重引用符で囲みます ("[abc]_[x|y]" のように) ).
  • 編集: 一部の人が指摘しているように、二重引用符は変数の展開やコマンドの置換を妨げません。したがって、正規表現に bash がそれらの 1 つとして解釈できるものが含まれている場合は、代わりに一重引用符を使用してください。


    一重引用符を使用します。一重引用符は、どの文字も解釈されないようにします。

    $ printf %s 'spaces  are  not  interpreted away
    neither are new lines
    nor variable names $TESTING
    nor square brackets [TESTING]
    nor pipe characters or redirection symbols | > <
    nor the semicolon ;
    nor backslashes \a \b \c \\
    the only thing that does not work is the single quote itself
    '
    

    一重引用符を埋め込む必要がある場合、2 つの解決策があります:

    $ printf '%s\n' '[ Don'"'"'t worry, be happy! ]'
    [ Don't worry, be happy! ]
    $ printf '%s\n' '[ Don'\''t worry, be happy! ]'
    [ Don't worry, be happy! ]
    

    man bashあたり

    <ブロック引用>

    3 つの引用メカニズムがあります:エスケープ文字 、一重引用符、および二重引用符。

    引用されていないバックスラッシュ (\ ) はエスケープ文字です . を除いて、次の文字のリテラル値を保持します。 \ の場合 ペアが表示され、バックスラッシュ自体は引用されず、\ は行の継続として扱われます (つまり、入力ストリームから削除され、事実上無視されます)。

    文字を一重引用符で囲むと、引用符内の各文字のリテラル値が維持されます。バックスラッシュが前にある場合でも、単一引用符の間に単一引用符を使用することはできません。

    文字を二重引用符で囲むと、$ を除く、引用符内のすべての文字のリテラル値が保持されます , ` , \ 、そして、履歴の拡張が有効になっている場合、! .文字 $` 二重引用符内の特別な意味を保持します。バックスラッシュは、次の文字のいずれかが続く場合にのみ特別な意味を保持します:$ , `" ,\ 、または <改行> .二重引用符は、その前にバックスラッシュを付けることにより、二重引用符で囲むことができます。有効にすると、! でない限り、履歴の展開が実行されます。 二重引用符で囲まれたものは、バックスラッシュを使用してエスケープされます。 ! の前のバックスラッシュ は削除されません。

    特別なパラメータ *@ 二重引用符で囲まれている場合は特別な意味があります (PARAMETERS を参照)

    $' の形の単語 文字列 ' 特別扱いされます。単語は string に展開されます 、バックスラッシュでエスケープされた文字は、ANSI C 標準の指定に従って置き換えられます。バックスラッシュのエスケープシーケンスが存在する場合、次のようにデコードされます:

           \a     alert (bell)
           \b     backspace
           \e
           \E     an escape character
           \f     form feed
           \n     new line
           \r     carriage return
           \t     horizontal tab
           \v     vertical tab
           \\     backslash
           \'     single quote
           \"     double quote
           \nnn   the eight-bit character whose value is the octal value nnn
                  (one to three digits)
           \xHH   the eight-bit character whose value is the hexadecimal value HH
                  (one or two hex digits)
           \uHHHH the Unicode (ISO/IEC 10646) character whose value is
                  the hexadecimal value HHHH (one to four hex digits)
           \UHHHHHHHH
                  the Unicode (ISO/IEC 10646) character whose value is
                  the hexadecimal value HHHHHHHH (one to eight hex digits)
           \cx    a control-x character

    展開された結果は、ドル記号がなかったかのように単一引用符で囲まれます。

    ドル記号が前に付いた二重引用符で囲まれた文字列 ($" 文字列 " ) は、現在のロケールに従って文字列を翻訳します。現在のロケールが C の場合 または POSIX 、ドル記号は無視されます。文字列が翻訳されて置換される場合、置換は二重引用符で囲まれます。


    Linux
    1. Linux で単一行コマンドを使用して Java バージョンを取得する方法

    2. bash 引数で引用符を保持する

    3. 一重引用符と二重引用符の両方を含む bash エイリアス コマンド

    1. Sshリモートコマンドライン引数はどのように解析されますか?

    2. docker run へのコマンドライン引数

    3. ソースコマンドによって呼び出されたスクリプトに引数を渡す方法は?

    1. LinuxでBASHコマンドライン履歴をクリアする方法

    2. コマンドライン引数をシェルスクリプトに渡す方法は?

    3. コマンドライン引数をBashスクリプトに渡しますか?