ようこそNICのホームページへ(なが〜い試運転中 from 2004年)
  • @nifty atnifty-ddns ddo.jp dip.jp   HP パソコン 健康 落語 海外 思うまま 電子工作
  •  
    unix系のシェルにbashがあります。この中で「 << 」や「 <<< 」があります。
    nasからサーバーをシャットダウンさせるスクリプトの中で使われていて、「 < 」と何が違うのか解らなかったので具体的に調べて見ました。備忘録です。
    ヒアドキュメント(<<)はbashに限らず、他のシェルやperl、phpなどでも使われており、 複数行の文をそのまま変数に入れたり、出力したりできます。
    (2018/06/12 追記ここから)phpのヒアドキュメントは「<<」ではなく「<<<」だそうです。
    php素人です。済みません。(2018/06/12 追記ここまで)

    例えば以下のように、区切り文字(任意でよい:仮に「EOT」)で前後を囲めば良いようです。
    cat <<EOT
    > test
    > 試験的な文
    > 最後の行
    EOT
    
    実行結果は
    test
    試験的な文
     最後の行
    
    のようになります。
    一方でヒアストリング(<<<)は私にはなじみがなく、入力リダイレクト(<)と何が違うのか解らないので 確認してみました。以下実行結果です。

    1.「cat」で確認

    str="abcdefg"
    
    cat < abcd
    -bash: abcd: そのようなファイルやディレクトリはありません
    
    cat <<< abcd
    abcd
    
    cat < "abcd"
    -bash: abcd: そのようなファイルやディレクトリはありません
    
    cat <<< "abcd"
    abcd
    
    cat < $str
    -bash: abcdefg: そのようなファイルやディレクトリはありません
    
    cat <<< $str
    abcdefg
    
    cat < "$str"
    -bash: abcdefg: そのようなファイルやディレクトリはありません
    
    cat <<< "$str"
    abcdefg
    

    2.「tr」で確認

    str1="hijklmn"
    
    tr a-z A-Z  < abcd
    -bash: abcd: そのようなファイルやディレクトリはありません
    
    tr a-z A-Z  <<< abcd
    ABCD
    
    tr a-z A-Z  < "abcd"
    -bash: abcd: そのようなファイルやディレクトリはありません
    
    tr a-z A-Z  <<< "abcd"
    ABCD
    
    tr a-z A-Z  < $str1
    -bash: hijklmn: そのようなファイルやディレクトリはありません
    
    tr a-z A-Z  <<< $str1
    HIJKLMN
    
    tr a-z A-Z  < "$str1"
    -bash: hijklmn: そのようなファイルやディレクトリはありません
    
    tr a-z A-Z  <<< "$str1"
    HIJKLMN
    
    
    (2018/04/28 追記ここから)
    追加でシングルクォート「’」とバッククォート「`」もやってみました。
    tr a-z A-Z < 'abcd'
    -bash: abcd: そのようなファイルやディレクトリはありません
    
    tr a-z A-Z <<< '$str1'
    $STR1
    
    tr a-z A-Z < `abcd`
    コマンド 'abcd' は見つかりませんでした。もしかして:
     コマンド 'abcde' - パッケージ 'abcde' (universe)
     コマンド 'bcd' - パッケージ 'bsdgames' (universe)
     コマンド 'lbcd' - パッケージ 'lbcd' (universe)
     コマンド 'ascd' - パッケージ 'ascd' (universe)
    abcd: コマンドが見つかりません
    -bash: `abcd`: 曖昧なリダイレクトです
    
    tr a-z A-Z <<< `$str1`
    hijklmn: コマンドが見つかりません
    
    ヒアストリングのシングルクォート「’」は変数が展開されず、変数そのものが渡されています。
    ヒアストリングのバッククォート「`」は変数が展開されて、展開された文字がコマンドと見なされてエラーが出ています。
    (2018/04/28 追記ここまで)

    結果:
    「<」はファイルまたはディレクトリが対象のようだ、エラーがでる。文字列や変数をリダイレクトするには「 <<< 」が必要なようだ。
    参考としたページです

    電子工作へ     HomePage     このページのトップ