gpt4 book ai didi

bash - 在同一命令上组合 bash 变量和参数扩展

转载 作者:行者123 更新时间:2023-11-29 09:42:11 25 4
gpt4 key购买 nike

在 bash shell 中,我尝试了以下 2 个产生不同效果的命令:

$ a=`echo UPDATED` echo ${a:-DEFAULT}
DEFAULT

$ a=`echo UPDATED`; echo ${a:-DEFAULT}
UPDATED

不可能在一个命令中获得结果(第一种情况)?如果不是,为什么?

该男子的一些引述:

A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator.

Expansion is performed on the command line after it has been split into words.

为清楚起见,真实情况涉及提供一个由事件处理程序 执行的二进制文件。二进制路径是从配置文件中获取的,如果未在配置文件中定义,则回退到默认值。

这个片段更接近真实情况,它由事件处理程序调用:

a=`getConfigVariable "myExec"` ${a:-/opt/bin/default}

其中 getConfigVariable "myExec"返回配置变量 "myExec",如果未定义则为空字符串。例如:

$ getConfigVariable "myExec"
/opt/bin/updated

最佳答案

Shell 在执行任何命令之前解析命令行。

换句话说,${a:-DEFAULT}a=UPDATED 被赋值之前计算。

(另请注意作业的重新表述如何避免 useless use of echo 。)

Chapter 3.5 of the Bash Reference Manual详细说明了命令行的解析顺序。您会注意到参数扩展接近开始,在波浪号和大括号扩展之后。

关于bash - 在同一命令上组合 bash 变量和参数扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47830867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com