私は個人的にWindowsとLinuxを使用してクロスプラットフォームで作業し、時には.sh
Notepad ++を使用してファイルを編集します。したがって、すべてのファイルのタブインデントをUnixスタイルに保つことは私にとって問題になったので、私の解決策はスペースベースのインデントを使用することでした。
しかし、heredocsからherdocsをインデントするときに問題があります。たとえば、以下は、内側の猫の区切り記号を含む外部の区切り記号です。
bash /dev/fd/10 10<<-'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
EMW
Some other command.
EOT
私はUnixのようなタブを使ってbashで正常に実行しましたが、Windowsのようなタブでは実行しなかったことを覚えています。なぜなら、空白を使うのと同じようにスクリプトがクラッシュしたからです。
私の質問:
私の質問は実際には次の質問で構成できます。私は自分だけでなく、他の好奇心旺盛な人がこれを見つけることができるように頼んでいます。
- 他のhereドキュメントからコマンドとhereドキュメントをインデントするためにスペースを使用できないのはなぜですか?
- 私が間違っていて、コマンドとここの文書を他のここの文書にスペースインデントすることを可能にする解決策がある場合、それは何ですか?
答え1
まず、Unixなどの表やWindowsなどの表はありません。タブ文字はWindowsとUnixで同じです。オペレーティングシステム間ではなくテキストエディタ間で変更される可能性は、1. TABキーを押したときに発生する状況、または2.ソースコードスペースでタブ文字に遭遇したときにエディタが表示する量です。経験的ルールは、インデントを好きなように設定し、タブを8に保つことです。しかし、これは別の議論です。
これでコードに戻ります。問題はEMW区切り記号です。この構文を使用すると、EMW行をインデントすることはできず(空白またはタブで)行の先頭になければなりません。そうしないと、区切り記号の状態が失われます。
したがって、1つの解決策は次のとおりです。
bash /dev/fd/10 10<<'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
....
....
EMW
Some other command.
EOT
apache2.conf
また、(上記の記号)の内容はインデントし....
ないでください。それ以外の場合はインデントになりますapache2.conf
。
完全なbashコードをインデントするには、次の構文を使用します。
bash /dev/fd/10 10<<-'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
....
....
EMW
Some other command.
EOT
ここでインデントに使用される先行スペースは、必要な数のTAB文字で構成されています(スペースではなくTAB!)。
私は何を変えましたか?この特定の構文を10<<'EOT'
使用するには、区切り10<<-'EOT'
文書を解析するときに先行TAB文字を削除する必要があります。その後、区切り記号EMW
と内容をインデントできますapache2.conf
。