正在将回显中的通配符扩展到文件



假设我在Bash中有以下内容:

FOO=/a/c*/d/
echo PATH=${FOO}:${PATH} >> .env

当我检查文件.env的内容时,路径仍然包含通配符。假设只有一个匹配项,我如何确保通配符扩展到路径,以便在回显时通配符不存在于文件中?

使其成为数组赋值,然后使用数组的第一个元素(用"假设只有一个匹配"保持(:

foo=( /a/c*/d/ )
echo "PATH=${foo[0]}:$PATH" >>.env

相比之下,如果你不特别想要这个假设,即使在有多个匹配的情况下,也可以在将:设置为IFS中的第一个字符后使用${array[*]}来正确展开:

foo=( /a/c*/d/ )
IFS=:
echo "PATH=${foo[*]}:$PATH" >>.env

您可以通过将路径列表扩展到一个单独的变量:来避免更改IFS或支付启动子流程的效率成本

printf -v path_prefix '%s:' /a/c*/d/
echo "PATH=${path_prefix}$PATH" >>.env

也许还有

foo=( /a/c*/d/ )
echo "PATH=$(IFS=:; echo "${foo[*]}"):$PATH" >> .env

所以您不必恢复IFS

最新更新