1

用单个变量替换字符串:

FOO=fooo
echo ${FOO%o}

输出为:foo

如何通过串联做到这一点?像这样的东西:

FOO=fooo
echo ${FOO$FOO%o}

输出是(我的愿望)fooofoo:。

如果这是可能的。


换句话说,我想连接几个字符串(使用变量),然后将字符串替换应用于整个字符串(所有变量的连接),而不仅仅是单个变量。

4

2 回答 2

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

如果您可以分享您尝试实现的目标,也许会有更优雅的解决方案。

于 2012-12-17T17:06:08.930 回答
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
于 2012-12-17T15:34:06.870 回答