问题标签 [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 投票
4 回答
362 浏览

linux - 将 stat 命令输出分配给变量时出现错误替换

我有一个脚本,它使用 find 并chgrp/chmod在指定的目录上递归设置某些权限和组$1

要提取此目标目录的组,我使用

但是在 下执行bash,这会产生错误:

简单地运行命令

正确提取组,我似乎无法将其放入mygrp变量中。

0 投票
2 回答
93 浏览

bash - shell 脚本中的命令替换与替换中的 shell 变量

基本上,我得到的文件将前三列粘贴到后面跟着一列空白行,因为看起来没有任何内容被附加到第 4 列

我觉得我可能不应该使用我在命令替换中创建的变量,但我不确定如何访问这些我需要的数字

如果它有助于输入文件非常大(大约 106 列和数万行),但这是一个看起来像的示例

然后输出看起来像(假设我们排除..之后的列)

抱歉,如果有不清楚的地方,请尽力说清楚,请问您是否有任何疑问,我将进行编辑或评论

谢谢

0 投票
2 回答
101 浏览

shell - double backslashes of sed single-quoted command inside command substitutions get translated to a single backslash

The expression inside the second backticks returns \a\b\c, and we have printf '%s' "\a\b\c", so it should print \a\b\c. My question is: why does the second script print &&& ?

note: I can get the second script work (prints \a\b\c) by prepending each backslash with another backslash, but I don't know why it's needed.

One related question: why does this single quoted string get interpreted when it's inside of a command substitution

0 投票
1 回答
225 浏览

bash - 多行双引号字符串触发后续单引号命令的历史扩展

我在 GNU bash,版本 4.3.11。

假设我想在文件上打印唯一行。我正在使用这种方法,它适用于文件:

但是,如果我从标准输入获取输入,在多行中使用双引号并通过管道连接到 awk,则会失败:

也就是 bash 试图扩展 command seen,这当然不知道,因为它是一个变量名。但这不应该发生,因为命令放在单引号内。

echo在单引号多行输入中输入效果很好:

有趣的是,它也适用于双引号的单行输入:

我想知道如果 Bash 发生在多行输入之后,为什么它会试图扩展历史,即使命令本身使用单引号。

其他注意事项:

中间有一个管道也不能解决它:

并且设置set +H会关闭历史记录,因此它运行良好,因为它不会尝试扩展任何内容:

我浏览了 rici 关于如何在 Bash 命令替换中解决错误“bash: !d': event not found”的规范答案,发现了许多可能的原因,但没有一个与这种行为匹配。

0 投票
1 回答
388 浏览

ruby - 如何使用命令替换将 ruby​​ 脚本的输出作为参数传递给 shell 命令?

我在 a_script.rb 中有以下内容:

当我运行时:

我得到以下输出:

但相反,我希望得到以下输出:

如何更改脚本以获得想要的输出?

0 投票
1 回答
188 浏览

bash - 外部脚本函数上的 bash 命令替换收到不正确的退出状态

此示例在 Mac El Capitan 上使用 bash 进行了测试

main_script.sh:

注意: func_a 和 func_b 是相同的,除了output声明局部变量的那一行。

外部.sh:

当我运行 main_script 时,输出是:

出于什么原因,在与命令替换相同的行上声明局部变量会影响结果?这可能是一个错误还是我错过了什么?

0 投票
1 回答
699 浏览

bash - 命令替换和 $PATH 变量

背景

这篇[文章]说:

命令替换扩展到命令的输出。这些命令在子shell中执行..

但是 bash 手册subshell在其命令替换部分中没有提及 a 。

我的测试如下

显示在命令替换期间生成了一个 pid 为 26899 的新 shell。此时我更改了PATH环境变量。

做了以下事情:

并得到以下错误:

我知道该错误是由于修改了 PATH 环境变量,这有助于 shell 定位二进制文​​件。但是,当我与命令替换一起阅读本文时,我感到很困惑。

如果通过$(..)子shell 生成,那么 PATH 环境变量应该是完整的并且应该指向二进制文件(cut 在这种情况下),因此 bash 不应该抱怨它无法找到cut二进制文件。

问题

PATH这里的命令替换是如何修改的?

0 投票
3 回答
314 浏览

linux - 命令替换问题(变量为空)

在 shell 脚本中进行命令替换时遇到一些问题。我之前在另一个系统上使用过这个脚本,所以不确定这里发生了什么。似乎无论我如何附上设置变量的命令,我都会得到一个空变量。我尝试了许多不同的方法来将它们括起来($()、反引号、引号)。如果有帮助,我正在尝试提交一个数组作业。

$mem设置正确,与sample线路有关。该echo命令打印一个空行。

0 投票
1 回答
168 浏览

linux - 两次 Bash 命令替换

我有目录a1..a5b1..b5c1..c5。在每个目录中,我有两个文件a1b1c1

我想在以“a”开头的目录中获取所有以“a”或“b”开头的文件。我可以这样做:

并获得:

/tmp/a1/a1 /tmp/a2/a1 /tmp/a3/a1 /tmp/a4/a1 /tmp/a5/a1 /tmp/b1/a1 /tmp/b2/a1 /tmp/b3/a1 /tmp /b4/a1 /tmp/b5/a1

现在,我将使用一个名为 DATA 的变量来存储目录,然后获取文件:

在输出中,DATA 内容正常(/tmp/{a,b}*),但我收到以下错误:

ls: 无法访问 /tmp/{a,b}*/a*: 没有这样的文件或目录

知道为什么会这样吗?

0 投票
1 回答
241 浏览

bash - bash:逗号替换中的 pgrep

我想构建一个小脚本(称为check_process.sh)来检查某个进程$PROC_NAME是否正在运行。如果是,则返回其 PID,否则返回 -1。

我的想法是pgrep -f <STRING>在命令替换中使用。

如果我直接在命令行中运行此代码:

一切正常:PID或-1,具体取决于进程状态。

我的脚本check_process.sh包含相同的行加上一个额外的变量来传递进程的名称:

但是这段代码不起作用!如果进程当前正在运行,我会得到两个 PID(进程的 PID 和其他东西......),而当我检查一个没有运行的进程时,我会得到其他东西

我很困惑。任何想法?提前致谢!