Bashを使用して定義されたコンテンツで番号付きファイルを作成する

Bashを使用して定義されたコンテンツで番号付きファイルを作成する

4006から7075までのファイル名を持つ69個のファイルを作成したいと思います。各ファイルには列挙型コンテンツが必要です。次のコードは、個々のファイルに挿入する内容をシェルに印刷します。しかし、どうすればいいですか?

#!/bin/bash
for i in `seq 4006 4075`; do
      echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done

引用符の間の部分を `(バックティック)に入れようとしましたが、空のファイルだけが表示されます。

答え1

echoコマンドの出力をリダイレクトするには、リダイレクト演算子を引用符>の外に置く必要があります。二重引用符の間の文字は>自分自身を表します。

デフォルトでは、bashではechoバックスラッシュシーケンスは拡張されません。-eオプションをに渡すかechoxpg_echoシェルオプションを設定するために使用するかshoptprintf代わりに使用する必要がありますecho

for i in `seq 4006 4075`; do
  printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done

ここのドキュメント複数行の文字列を表すより読みやすい方法です。コマンドライン引数ではなく入力として渡されるので、代わりにcatを使用してくださいecho。テキストがインデントされると、インデントがコピーされます(インデント<<-EOFを避けるために代わりに使用できますが、<<EOFスペースの代わりにタブのインデントのみが可能です)。

for i in `seq 4006 4075`; do
  cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done

関連情報