假设我在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