如何使用斜杠将变量连接为新字符串

时间:2018-10-29 03:40:08

标签: linux bash unix

我有以下bash代码:

FULLSTR="/FOO/BAR/QUX"
IFS=/
ARY=($FULLSTR)

我想做的是将ARY的第二和第三元素与 /并将其分配给变量。我希望得到的最终结果是/BAR/QUX

但是为什么不起作用:

NSTR=/${ARY[2]}/${ARY[3]}
echo $NSTR

它产生:

 BAR QUX

正确的方法是什么?

2 个答案:

答案 0 :(得分:3)

问题出在您的echo $NSTR命令中:IFS仍设置为/,所以当$NSTR进行分词和文件名扩展时, /的两侧成为echo的单独参数。

要解决此问题,我建议找到一种更好的方法来将ARY设置为开始而不是以$FULLSTR开头。诸如$FULLSTR之类的参数扩展实际上应该始终用 引号,因为您基本上从不想要单词拆分和文件名扩展。 (在您的情况下,您确实希望分词... ...,但不希望扩展文件名。)

如果这不是一种选择-如果设置ARY的唯一方法是拆分$FULLSTR-那么您可以编写如下内容:

OLDIFS="$IFS"
IFS=/
ARY=($FULLSTR)
IFS="$OLDIFS"

NSTR="/${ARY[2]}/${ARY[3]}"
echo "$NSTR"

或者,更好的是,您可以直接基于NSTR设置$FULLSTR,并避免使用ARY,除非您别无选择:

NSTR="/${FULLSTR#/*/}"
echo "$NSTR"

答案 1 :(得分:0)

您不需要连接,可以剪切!

FULLSTR="/FOO/BAR/QUX"

echo ${FULLSTR#/FOO}

输出:

/BAR/QUX

结果如何!