问题标签 [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.
linux - 将 stat 命令输出分配给变量时出现错误替换
我有一个脚本,它使用 find 并chgrp/chmod
在指定的目录上递归设置某些权限和组$1
要提取此目标目录的组,我使用
但是在 下执行bash
,这会产生错误:
简单地运行命令
正确提取组,我似乎无法将其放入mygrp
变量中。
bash - shell 脚本中的命令替换与替换中的 shell 变量
基本上,我得到的文件将前三列粘贴到后面跟着一列空白行,因为看起来没有任何内容被附加到第 4 列
我觉得我可能不应该使用我在命令替换中创建的变量,但我不确定如何访问这些我需要的数字
如果它有助于输入文件非常大(大约 106 列和数万行),但这是一个看起来像的示例
然后输出看起来像(假设我们排除..之后的列)
抱歉,如果有不清楚的地方,请尽力说清楚,请问您是否有任何疑问,我将进行编辑或评论
谢谢
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
bash - 多行双引号字符串触发后续单引号命令的历史扩展
我在 GNU bash,版本 4.3.11。
假设我想在文件上打印唯一行。我正在使用这种方法,它适用于文件:
但是,如果我从标准输入获取输入,在多行中使用双引号并通过管道连接到 awk,则会失败:
也就是 bash 试图扩展 command seen
,这当然不知道,因为它是一个变量名。但这不应该发生,因为命令放在单引号内。
echo
在单引号多行输入中输入效果很好:
有趣的是,它也适用于双引号的单行输入:
我想知道如果 Bash 发生在多行输入之后,为什么它会试图扩展历史,即使命令本身使用单引号。
其他注意事项:
中间有一个管道也不能解决它:
并且设置set +H
会关闭历史记录,因此它运行良好,因为它不会尝试扩展任何内容:
我浏览了 rici 关于如何在 Bash 命令替换中解决错误“bash: !d': event not found”的规范答案,发现了许多可能的原因,但没有一个与这种行为匹配。
ruby - 如何使用命令替换将 ruby 脚本的输出作为参数传递给 shell 命令?
我在 a_script.rb 中有以下内容:
当我运行时:
我得到以下输出:
但相反,我希望得到以下输出:
如何更改脚本以获得想要的输出?
bash - 外部脚本函数上的 bash 命令替换收到不正确的退出状态
此示例在 Mac El Capitan 上使用 bash 进行了测试
main_script.sh:
注意: func_a 和 func_b 是相同的,除了
output
声明局部变量的那一行。
外部.sh:
当我运行 main_script 时,输出是:
出于什么原因,在与命令替换相同的行上声明局部变量会影响结果?这可能是一个错误还是我错过了什么?
bash - 命令替换和 $PATH 变量
背景
这篇[文章]说:
命令替换扩展到命令的输出。这些命令在子shell中执行..
但是 bash 手册subshell
在其命令替换部分中没有提及 a 。
我的测试如下
显示在命令替换期间生成了一个 pid 为 26899 的新 shell。此时我更改了PATH
环境变量。
做了以下事情:
并得到以下错误:
我知道该错误是由于修改了 PATH 环境变量,这有助于 shell 定位二进制文件。但是,当我与命令替换一起阅读本文时,我感到很困惑。
如果通过$(..)
子shell 生成,那么 PATH 环境变量应该是完整的并且应该指向二进制文件(cut
在这种情况下),因此 bash 不应该抱怨它无法找到cut
二进制文件。
问题
PATH
这里的命令替换是如何修改的?
linux - 命令替换问题(变量为空)
在 shell 脚本中进行命令替换时遇到一些问题。我之前在另一个系统上使用过这个脚本,所以不确定这里发生了什么。似乎无论我如何附上设置变量的命令,我都会得到一个空变量。我尝试了许多不同的方法来将它们括起来($()
、反引号、引号)。如果有帮助,我正在尝试提交一个数组作业。
$mem
设置正确,与sample
线路有关。该echo
命令打印一个空行。
linux - 两次 Bash 命令替换
我有目录a1..a5,b1..b5和c1..c5。在每个目录中,我有两个文件a1、b1和c1。
我想在以“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*: 没有这样的文件或目录
知道为什么会这样吗?
bash - bash:逗号替换中的 pgrep
我想构建一个小脚本(称为check_process.sh
)来检查某个进程$PROC_NAME
是否正在运行。如果是,则返回其 PID,否则返回 -1。
我的想法是pgrep -f <STRING>
在命令替换中使用。
如果我直接在命令行中运行此代码:
一切正常:PID
或-1,具体取决于进程状态。
我的脚本check_process.sh
包含相同的行加上一个额外的变量来传递进程的名称:
但是这段代码不起作用!如果进程当前正在运行,我会得到两个 PID
(进程的 PID 和其他东西......),而当我检查一个没有运行的进程时,我会得到其他东西!
我很困惑。任何想法?提前致谢!