Bash関数でインデントを使用して複数行をキャプチャする方法は?

Bash関数でインデントを使用して複数行をキャプチャする方法は?

bash機能があります

yumtelegraf() {
cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install telegraf
}

関数でインデントを使用すると、ファイルにタブスペースが印刷されます。

yumtelegraf() {
  cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
  [influxdb]
  name = InfluxDB Repository - RHEL \$releasever
  baseurl = 
  https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
  enabled = 1
  gpgcheck = 1
  gpgkey = https://repos.influxdata.com/influxdb.key
  EOF
  sudo yum install telegraf
}

この行動を避ける方法は?
echoコマンドを使用してこれを達成することもできますか?

答え1

たとえば、タブと(ダッシュを含む)を使用する<<-EOFか、猫の代わりにフィルタを使用します。sed:

$ sed -e "s/^\s*//" <<EOF
 as
  df
   gh
    jk
        op    # two tabs
EOF

これにより、スペースとタブが削除されます。端はEOFインデントできません。閉じるタグと同じ数のスペースを使用し<<" EOF"て再利用できますが、" EOF"引用符で文書が拡張されないため、この場合は望ましくありません。比較する:

$ a=x
$ cat <<EOF
"$a"
EOF
"x"
$ cat <<"EOF"
"$a"
EOF
"$a"

echoこの問題がある限り。ただし、次のprintfものを使用することもできます。

printf "%s\n" \
  "[influxdb]" \
  "name = InfluxDB Repository - RHEL \$releasever" \
  "baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable" \
  "enabled = 1" \
  "gpgcheck = 1" \
  "gpgkey = https://repos.influxdata.com/influxdb.key" \
| sudo tee /etc/yum.repos.d/influxdb.repo

あなたの質問にダッシュを残しましたが、\$拡張から外れているため、ここでは不正確かもしれません。

答え2

必要な機能を具体的に有効にするには、<<-(注)を使用する必要があります。-

yumtelegraf() {
  cat <<-EOF | sudo tee /etc/yum.repos.d/influxdb.repo
  [influxdb]
  name = InfluxDB Repository - RHEL \$releasever
  baseurl = 
  https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
  enabled = 1
  gpgcheck = 1
  gpgkey = https://repos.influxdata.com/influxdb.key
  EOF
  sudo yum install telegraf
}

答え3

あなたはそれを使用することができますecho -e "\tblabla"

$ echo -e "\tblabla\n\t\tblibli\n\t\t\tbloblo\n"
    blabla
        blibli
            bloblo

Bashのマニュアルページに記載されているように:

If the -e option is given, interpretation of the following backslash-escaped characters is enabled.
[...]
              \a     alert (bell)
              \b     backspace
              \c     suppress further output
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal 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)

関連情報