他の方向で多くの質問と回答を見つけることができますが、残念ながら私が望む代替方法はありません。文字を交換する、例えば#
、文字列として、たとえば、次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
(そのようなことをお勧めしません。)
答え2
あなたはできます分ける区切り文字の文字列、プレフィックス、およびサフィックスをキャプチャし、中括弧拡張を使用して名前を生成します。
str='test#asdf'
IFS='#' read -r prefix suffix <<<"$str"
names=( "$prefix"{0..10}"$suffix" )
declare -p names
declare -a names='([0]="test0asdf" [1]="test1asdf" [2]="test2asdf" [3]="test3asdf" [4]="test4asdf" [5]="test5asdf" [6]="test6asdf" [7]="test7asdf" [8]="test8asdf" [9]="test9asdf" [10]="test10asdf")'
答え3
必ず使うべきですか#
?たぶんあなたはそれを使用できますか%d
?
$ for i in {1..10}; do printf "_%d.test " "$i"; done
_1.test _2.test _3.test _4.test _5.test _6.test _7.test _8.test _9.test _10.test
答え4
私はこれをします。パラメータ拡張:
$ var='test#asdf'
$ for i in {1..10}; do echo "${var/\#/"$i"}"; done
test1asdf
test2asdf
test3asdf
test4asdf
test5asdf
test6asdf
test7asdf
test8asdf
test9asdf
test10asdf
拡張${parameter/pattern/string}
- (私たちの場合)の拡張を行い、
$parameter
$var
- 最初の項目を置き換える
pattern
(Escape#
-/#
私たちが避けたい「文字列の始めに置き換える」という文脈で特別な意味を持ちます。) string
("$i"
私たちの場合)
あるいは、それをフォーマット文字列に置き換えて使用することも#
できます。%d
printf
printf "${var/\#/%d}\\n" {1..10}