README.md
私はaを$1\n
下線の長さで埋める高速bash関数を書こうとしています$1
。
他のstackexchange質問で見つかったコードは、文字の<n>
時間を印刷するために次のように使用されています。
printf '=%.0s' {1..<n>}
実際、これはうまくいきます(明らかに<n>
数字を代わりに使用します)。
鉱山を作るには、README.md
関数は次のようになると思いました。
make_readme() {
echo "$1
$(printf '=%.0s' {1..${#1}})" > README.md
}
make_readme "Some project"
ただし、これにより、次のテキストを含むファイルが生成されます。
Some project
=
私が知る限り、${#1}
inは$(...)
空の文字列に置き換えられます。私の意見では、コマンド置換には独自のパラメータ範囲があり、パラメータが置換に渡されないため、$1
何も置き換えられないようです。
ついにいくつかの解決策が見つかりました。
make_readme() {
underline="printf '=%.0s' {1..${#1}}"
echo "$1
$(eval "$underline")" > README.md
}
または
make_readme() {
echo "$1" > README.md
printf '=%.0s' {1..${#1}} >> README.md
}
しかし、これを一行で実行する方法があるはずです。
ベストアンサー1
提案:
#!/bin/bash
make_readme () {
printf '%s\n%s\n' "$1" "$( eval "printf '=%.0s' {1..${#1}}" )"
}
make_readme 'Hello World!' >README.md
または外部ユーティリティ呼び出しが機能している場合
#!/bin/bash
make_readme () {
# print $1, then replace all characters in it with = and print again
sed 'p; s/./=/g' <<<"$1"
}
make_readme 'Hello World!' >README.md
どちらもREADME.md
インクルードというファイルを生成します。
Hello World!
============