用单个变量替换字符串:
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
如果您可以分享您尝试实现的目标,也许会有更优雅的解决方案。
请参阅下面的两个可能的答案,具体取决于您要查找的内容:
答案#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