bash 大括号扩展可以在引号内执行吗

bash 大括号扩展可以在引号内执行吗

为了让我的 干涸bashrc,我尝试改变这一点,

CDPATH=".:~/Development:~/Development/resources:~"

对此,

CDPATH=".:~/Development{,/resources}:~"

但我发现大括号扩展并未在带引号的字符串内执行。有办法实现这一点吗?

答案1

是的,实际上有:

set . ~/Development{,/resources} ~
IFS=:; CDPATH="$*"

特殊参数替换每个位置参数之间的"$*"第一个字符。$IFS因此,如果您set将所需的参数扩展为单独的参数,则可以在分配时根据需要快速填写适当的分隔符。

如果,正如所建议的那样,您可以使用一些关于如何保存/恢复 的值的指针$IFS,您可以这样做:

CDPATH=$IFS
set . ~/Development{,/resources} ~
IFS=:${IFS+;IFS=\$CDPATH}
eval 'set "$*"; unset IFS'"
      $IFS;    CDPATH=\$1"

有时,为了保持环境清洁,做一些调整是值得的 - 当一个参数影响环境时,无论它是否设置 - 并且以不同的方式取决于 - 最好小心。

不过,只有在您无法保证无法持久控制的环境中,此类预防措施才是真正必要的 - 换句话说,您不需要在自己的 rc 文件中执行此操作。在这样的情况下,你几乎可以保证永久控制 - 所以你可以(和应该设置适合您的特殊 shell 参数。

相关内容