我有以下bash代码:
FULLSTR="/FOO/BAR/QUX"
IFS=/
ARY=($FULLSTR)
我想做的是将ARY
的第二和第三元素与
/
并将其分配给变量。我希望得到的最终结果是/BAR/QUX
。
但是为什么不起作用:
NSTR=/${ARY[2]}/${ARY[3]}
echo $NSTR
它产生:
BAR QUX
正确的方法是什么?
答案 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
结果如何!