使用单个变量替换字符串:
FOO=fooo
echo ${FOO%o}
此输出为:foo
。
如何使用连接执行此操作?像这样:
FOO=fooo
echo ${FOO$FOO%o}
此输出是(我的愿望):fooofoo
。
如果可以的话。
换句话说,我想连接几个字符串(使用变量),然后将字符串替换应用于整个字符串(所有变量的连接),而不仅仅是单个变量。
答案 0 :(得分:2)
据我所知,没有办法像单一的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
如果你可以分享你想要达到的目标,或许有更优雅的解决方案。
答案 1 :(得分:0)
根据您正在寻找的内容,请参阅下面的两个可能的答案:
回答#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