単一変数による文字列置換:
FOO=fooo
echo ${FOO%o}
このための出力は次のとおりfoo
です。
連結でこれを行う方法は?このようなもの:
FOO=fooo
echo ${FOO$FOO%o}
このための出力は(私の願い)です:fooofoo
。
これが可能であれば。
つまり、(変数を使用して)複数の文字列を連結してから、単一の変数だけでなく、文字列全体(すべての変数の連結)に文字列置換を適用したいと思います。
単一変数による文字列置換:
FOO=fooo
echo ${FOO%o}
このための出力は次のとおりfoo
です。
連結でこれを行う方法は?このようなもの:
FOO=fooo
echo ${FOO$FOO%o}
このための出力は(私の願い)です:fooofoo
。
これが可能であれば。
つまり、(変数を使用して)複数の文字列を連結してから、単一の変数だけでなく、文字列全体(すべての変数の連結)に文字列置換を適用したいと思います。
私の知る限り、単一の bash 操作としてそれを行う方法はありません。最初に変数への連結を実行し、次に必要なパラメーターの置換/展開を実行する必要があります。
FOO=foooo
TMP=$FOO$FOO # concatenation
echo "${TMP%o}" # parameter substitution on concatenated string
追加の var 割り当てによって読みにくくなっていると思われる場合は、同様の操作を実行する別のコマンドに出力をパイプするという効率の悪い (しかし認識しやすい) アプローチを選択できます。
[me@home]$ FOO="fooo"
[me@home]$ TMP=$FOO$FOO; echo ${TMP%o} # bash only, with temp var
fooofoo
[me@home]]$ echo $FOO$FOO | sed 's/o$//' # pipe to an equivalent operation
fooofoo
さらに、最終目標が何であるかによっては、それを達成するためのよりクリーンな方法があるかもしれません.
たとえば、連結に続いてトリミングが必要になる一般的な状況は、次のようなパス操作です。
[me@home]$ APP_ROOT=/opt/myapp
[me@home]$ APP_PATH=/config/hello.cfg
[me@home]$ FULL_PATH=$APP_ROOT$APP_PATH
[me@home]$ echo ${FULL_PATH%/hello.cfg}
/opt/myapp/config
その場合、「よりクリーンな」アプローチは次のようになります。
[me@home]$ dirname $APP_ROOT$APP_PATH
/opt/myapp/config
達成しようとしていることを共有できれば、もっと洗練された解決策があるかもしれません。
探しているものに応じて、以下の 2 つの可能な答えを参照してください。
答え #1:
FOO=fooo
echo "${FOO}${FOO%o}"
出力:
fooofoo
答え #2:
FOO=fooo
echo "${FOO%o}${FOO%o}"
出力:
foofoo
答え #3:
FOO=fooo
CONCAT="$FOO$FOO"
echo "${CONCAT%ofooo}"
foo