问题标签 [command-substitution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
17845 浏览

bash - 在命令替换中转义 AWK 中的反斜杠

我试图逃避 AWK 中的反斜杠。这是我正在尝试做的一个示例。

说,我有一个变量

以下作品

但是,当我尝试使用命令替换将同一命令的输出保存到变量时,出现以下错误:

我无法理解为什么命令替换会破坏 AWK。非常感谢你的帮助。

0 投票
1 回答
2026 浏览

bash - Bash 命令替换( $(...) )强制进程到前台

摘要:我有一个 bash 脚本,它在后台运行一个进程,并且应该作为普通命令在命令替换块中工作,例如$(...). 脚本本身会产生一个分叉到后台的进程。可以简化为这个测试用例:

在 shell 中运行此脚本将立即返回(并打印“某物”),在其中运行它$(...)会挂起 5 秒钟,等待后台“睡眠”完成。

适用于在命令替换 shell 内启动的任何内容并在后台生成进程,显然包括该进程树中的任何子进程。好像对bash和zsh都有影响,其他的没试过。


原始问题:我有一个 bash 脚本,它应该将一个值打印到标准输出,并在每次运行时将其复制到 X 剪贴板。

这个脚本(我们称之为“某物”)旨在用于获取这个词(实际上是另一个命令的输出)并以不同的方式使用,例如:

打印到普通标准输出,将输出复制到剪贴板以在普通 X 应用程序中使用,并且还应该能够使用带有 bash 命令替换的标准输出,在任何命令的中间插入这个词。

然而,bash 命令替换似乎强制xclip在前台保持活力。xclip由于 X 剪贴板要求客户端提供剪贴板内容,因此通常会自行守护进程,并且默认行为是在替换剪贴板内容后使其退出。

在 xclip 遇到这个问题后,我做了我在这个问题开头写的最小测试用例,所以它似乎应用了任何在$(...)shell中守护进程的东西

谁能解释这种行为?有什么办法可以避免吗?

0 投票
2 回答
2909 浏览

bash - Bash 的 IFS 变量如何影响命令替换?

我正在编写一个 bash 脚本,该脚本循环遍历命令替换的输出,然后尝试在循环体内执行另一个命令替换。这是代码:

我将 IFS 设置为换行符,以便循环遍历 xmllint 命令的每一行输出,而不是遍历每个以空格分隔的单词。但是,这会使循环内的命令替换失败。一些调试得出结论,问题的本质是这样的:

这给出了错误:

您可以看到我在第一个代码示例中尝试通过在循环中重置 IFS 来进行修复。那没有用。

我意识到我可以使用脚本的不同习语来解决问题。
例如,将 xmllint 命令替换为 awk 的过程,而不是在每个单独的行上执行 awk 来命名一种可能性。欢迎对此发表评论,但请提交与以下相关的答案:

  1. 为什么将 IFS 设置为换行符会混淆命令替换生成的导出?
  2. 为什么在循环中重置 IFS 不能解决问题?

更新:根据与 Barmar 的讨论,IFS 用于命令/变量扩展后的分词。

0 投票
1 回答
184 浏览

regex - 如何结合命令替换和正则表达式?

是否有可能在正则表达式中进行命令替换?我想在 Linux 中查找具有特定名称的文件。名称可能包含修复字符串,但也可能仅包含主机名。所以我想做的是:

我不确定是否有可能以某种方式将主机名命令的输出与正则表达式连接起来?提前致谢!

0 投票
3 回答
467 浏览

string - 命令替换作为单行中的变量

我收到以下错误:

我正在尝试获取之前的.号码

并将其用作qdelopenPBS 中的参数,以便我可以删除从登录开始的所有进程kigumen

所以理想情况下,这应该工作:

到目前为止,只有这个有效:

但我想要一个没有临时变量的干净的单线。

0 投票
2 回答
20556 浏览

shell - bash $(command) 表示法的鱼等价物

我目前正在尝试使用鱼壳而不是使用 bash。我在学习与鱼等效的符号时遇到困难的一种符号是$(command),类似于此 SOF 帖子中的描述方式。我如何用鱼写这个?请记住,我可以在要评估的命令周围使用反斜杠字符,但链接的帖子和其他帖子不鼓励这样做,因为它是评估命令的旧样式。

具体来说,这是我要转换为 fish 语法的 bash 命令(用于在 shell 启动期间初始化rbenv ):

0 投票
2 回答
290 浏览

c# - Using substitution for execute methods c#

I'm new in C# and I need some hints to solve this problem: I start to develop an application in C# an Windows Form Application (until this summer, I work 20 years in Visual Fox) The UI is generic (has an grid and controls for show details for current record), and is build dynamic from definitions I stored in an Xml File.

I want to create a class for each table I use for create methods for getting default values, validate fields, and record, etc). I use for this classes a namespace: BmiSqlTables.

Now I need in UI on adding record to get default values, validate fields, etc. The problem i have is to replace switch case statements which can became a very large one (for 50 tables) with something using substitution like in Foxpro

In Foxpro the GetDefaultValue can be something like this:

Any advice to this problem (and project) will be apreciate. Hope you understand my english, and what I need to do. Thanks in advance.

0 投票
1 回答
5434 浏览

bash - Bash:检查多管道命令链的退出状态

我在检查多管道命令链中的某个命令是否引发错误时遇到问题。通常这并不难检查,但在我的情况下也set -o pipefail没有检查工作。${PIPESTATUS[@]}设置是这样的:

注 1:该命令经过彻底测试并且运行良好。

现在,我想将该命令的输出存储在一个名为procdata. 因此,我做到了:

注2:eval是必要的,因为否则$snmpcmd会抛出一个invalid option -- <grepoption>没有意义的错误,因为显然<grepoption>不是一个$snmpcmd选项。在这个阶段,我认为这是一个错误,$snmpcmd但那是另一个节目......

如果发生错误,procdata将为空。但是,它可能是空的,有两个不同的原因:要么是因为执行时发生错误$snmpcmd(例如超时),要么是因为grep找不到它要查找的内容。问题是,我需要能够区分这两种情况并分别处理。

因此,set -o pipefail这不是一个选项,因为它会传播任何错误并且我无法区分管道的哪个部分失败。另一方面,即使我有很多管道,echo ${PIPESTATUS[@]}也总是0在追求!?procdata=( $(eval $cmd) )但是,如果我直接在提示符下执行整个命令并echo ${PIPESTATUS[@]}立即调用,它会正确返回所有管道的退出状态。

我知道我可以将 err 流绑定到标准输出,但我必须使用启发式方法来检查其中的元素procdata是有效消息还是错误消息,并且我冒着误报的风险。我还可以通过管道将 stdout 传输到/dev/null并仅捕获错误流并检查${#procdata[@]} -eq 0. 但是我必须重复调用才能获取实际数据,并且整个命令的时间成本很高(大约 3-5 秒)。我不想叫它两次。或者我可以使用一个临时文件来写入错误,但我宁愿这样做,而不需要创建/删除文件的开销。

有什么想法可以让我在 bash 中完成这项工作吗?

谢谢

PS:

0 投票
4 回答
765 浏览

bash - awk -v 是否接受命令替换?

我可以使用 bash 命令替换技术在单行中创建一个 awk 变量吗?这是我正在尝试的,但有些不对劲。

也许是因为命令替换使用了 Awk(尽管我对此表示怀疑)?也许这太“盗梦空间”了?GNU awk 3.1.7

0 投票
2 回答
3381 浏览

bash - 什么时候命令替换比单独的相同命令产生更多的子shell?

昨天有人建议我在 bash 中使用命令替换会导致产生不必要的子 shell。该建议针对此用例

尽我所能,这对于这个用例来说似乎是正确的。然而,试图验证这一点的快速搜索会导致大量令人困惑和矛盾的建议。似乎流行的智慧说所有命令替换的使用都会产生一个子shell。例如:

命令替换扩展到命令的输出。这些命令在 subshel​​l 中执行,它们的标准输出数据是替换语法扩展的内容。(来源

这似乎很简单,除非您继续挖掘,在这种情况下,您将开始找到对事实并非如此的建议的引用。

命令替换不一定会调用 subshel​​l,并且在大多数情况下不会。它唯一保证的是无序评估:它只是先评估替换中的表达式,然后使用替换的结果评估周围的语句。(来源

这似乎很合理,但这是真的吗?This answer to a subshel​​l related question提示我man bash注意以下事项:

管道中的每个命令都作为单独的进程执行(即,在子shell 中)。

这让我想到了主要问题。究竟什么会导致命令替换产生一个无论如何都不会产生的子shell来单独执行相同的命令?

请考虑以下情况并解释哪些情况会产生额外子外壳的开销:

这些对中的每一对都会产生相同数量的子shell来执行吗?POSIX 与 bash 实现有区别吗?在其他情况下,使用命令替换会产生一个子shell,而单独运行同一组命令则不会?