假设我在 Bash 中有以下内容:
FOO=/a/c*/d/
echo PATH=${FOO}:${PATH} >> .env
当我检查文件的内容时,.env
路径仍然包含通配符。假设只有一个匹配项,如何确保通配符扩展为路径,以便回显时文件中不存在通配符?
假设我在 Bash 中有以下内容:
FOO=/a/c*/d/
echo PATH=${FOO}:${PATH} >> .env
当我检查文件的内容时,.env
路径仍然包含通配符。假设只有一个匹配项,如何确保通配符扩展为路径,以便回显时文件中不存在通配符?
使其成为数组赋值,然后使用数组的第一个元素(与“假设只有一个匹配”保持一致):
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
或许还有
foo=( /a/c*/d/ )
echo "PATH=$(IFS=:; echo "${foo[*]}"):$PATH" >> .env
所以你不必恢复IFS