Shellで複数の文字列を取得するために1つの文字を置き換える方法は?

Shellで複数の文字列を取得するために1つの文字を置き換える方法は?

他の方向で多くの質問と回答を見つけることができますが、残念ながら私が望む代替方法はありません。文字を交換する、例えば#文字列として、たとえば、次test#asdfのようなシーケンスを使用します。{0..10} 文字列シーケンスの取得、この例ではtest0asdf test1asdf test2asdf test3asdf test4asdf test5asdf test6asdf test7asdf test8asdf test9asdf test10asdf

私が試したこと以外の人から得たもの:

  • echo '_#.test' | tr # {0..10}(投げの使い方)
  • echo '_#.test' | sed -r 's/#/{0..10}/g'(返品_{0..10}.test
  • echo '_#.test' | sed -r 's/#/'{0..10}'/g'(最初のものが機能し、その後は得られますsed: can't read (...) no such file or directory

この問題を解決するための作業方法は何ですか?

まだコメントしていない可能性があるので編集してください。#文字列は別のプログラムから渡されるため、文字を置き換える必要がある文字列で使用する必要があります。しかし、まず他のキャラクターに置き換えることができます。

ベストアンサー1

演算子{0..10} zsh(現在他のシェルでもサポートされていますbash)はcsh-スタイル中括弧拡張の別の形式です。

広がるシェルを通してコマンドを呼び出す前に。このコマンドは、これらの{0..10}

With tr '#' {0..10}(引用符#がない場合、シェルはコメントの先頭に解析されます)、tr末尾を ("tr", "#", "0", "1", ..., "10") として呼び出します。引数としてtr期待しない引数が多すぎます。

希望する場所は次のとおりです。

echo '_'{0..10}'.test' 

echo「_0.test」、「_1.test」、...、「_10.test」をパラメータとして渡すために使用されます。

#または、この演算子に変換するには、{0..10}評価するシェルコードに変換します。

eval "$(echo 'echo _#.test' | sed 's/#/{0..10}/')"

パラメータとしてeval渡す場所です。echo _{0..10}.test

(そのようなことをお勧めしません。)

おすすめ記事