変数の前後の部分文字列の削除

変数の前後の部分文字列の削除

変数の前の部分文字列を削除できることを知っています。

X=foobarbaz
echo ${X#foo}       # barbaz

...そして変数の後ろから:

echo ${X%baz}       # foobar

この2つをどのように組み合わせますか?私は試した:

echo ${{X#foo}%baz}    # "bad substitution"
echo ${${X#foo}%baz}   # "bad substitution"
echo ${X#foo%baz}      # foobarbaz

私はいません。考える次のように中間変数を使用できますfind -exec

find ./Source -name '*.src' \
    -exec bash -c 'myconvert -i "{}" -o "./Dest/${0#./Source/%.src}.dst"' {} \;

ベストアンサー1

私はこれが可能だとは思わない(しかし間違っていることが証明されることを願っています)。ただし、中間変数を使用できます。他のインスタンスと同様に、ランナーは単にbashインスタンスbash -cです。-exec

$ find . -type f
./foobarbaz
$ find . -type f -exec bash -c 'v=${0#./foo}; echo ${v%baz}'  {} \;
bar

したがって、これがなぜ機能しないのかわかりません(あなたが正しくやろうとしていることを理解している場合)。

find ./Source -name '*.src' \
     -exec bash -c 'v=${0%.src}; \ 
        myconvert -i "{}" -o "./Dest/${v#./Source/}.dst"' {} \;

おすすめ記事