-1

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

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

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

4

2 回答 2

2

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

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

相比之下,如果您不特别想要该假设,即使在有多个匹配项的情况下,您也可以使用${array[*]}after 设置:为第一个字符以正确扩展:IFS

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
于 2021-12-21T17:46:51.110 回答
0

或许还有

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

所以你不必恢复IFS

于 2021-12-21T18:20:31.600 回答