标签: command-substitution

$(stuff) 和 `stuff` 有什么区别?

命令替换有两种语法:美元括号和反引号。运行top -p $(pidof init)top -p `pidof init`给出相同的输出。这两种做同样事情的方式,还是有区别?

command-line shell command-substitution

283
推荐指数
5
解决办法
3万
查看次数

将上一个命令的输出作为参数传递给下一个

我有一个将数据输出到 stdout ( command1 -p=aaa -v=bbb -i=4)的命令。输出行可以具有以下值:

rate (10%) - name: value - 10Kbps
Run Code Online (Sandbox Code Playgroud)

我想 grep 该输出以存储该“速率”(我想管道在这里会很有用)。最后,我希望该速率是第二个命令的参数值(假设command2 -t=${rate}

我这边看起来很棘手;我想更好地了解如何使用管道、grep、sed 等。

我已经尝试了很多这样的组合,但我对这些感到困惑:

$ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2>&1 command2 -t="rate was "${rate}
Run Code Online (Sandbox Code Playgroud)

command-line pipe command-substitution output arguments

179
推荐指数
5
解决办法
47万
查看次数

在 Bash 中引用 $(命令替换)

在我的 Bash 环境中,我使用包含空格的变量,并在命令替换中使用这些变量。

引用我的变量的正确方法是什么?如果这些是嵌套的,我该怎么做?

DIRNAME=$(dirname "$FILE")
Run Code Online (Sandbox Code Playgroud)

或者我在替换之外引用?

DIRNAME="$(dirname $FILE)"
Run Code Online (Sandbox Code Playgroud)

或两者?

DIRNAME="$(dirname "$FILE")"
Run Code Online (Sandbox Code Playgroud)

还是我使用反引号?

DIRNAME=`dirname "$FILE"`
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?以及如何轻松检查报价是否正确?

shell bash quoting command-substitution

173
推荐指数
3
解决办法
15万
查看次数

如何在 cron 选项卡作业中执行`date`?

我想为日志文件名中包含当前小时的 cron 脚本创建一个日志文件。这是我尝试使用的命令:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在运行时收到此消息:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我曾尝试date以各种方式逃避该部分,但运气不佳。是否可以在 crontab 文件中内嵌进行此操作,或者我是否需要创建一个 shell 脚本来执行此操作?

cron quoting command-substitution

165
推荐指数
4
解决办法
15万
查看次数

将退出代码分配给 shell 局部变量

#!/bin/bash
function0()
{
 local t1=$(exit 1)
 echo $t1
}

function0
Run Code Online (Sandbox Code Playgroud)

echo打印空值。我期望:

1
Run Code Online (Sandbox Code Playgroud)

为什么t1变量没有被分配退出命令的返回值 - 1

shell bash command-substitution variable

60
推荐指数
3
解决办法
12万
查看次数

为什么使用命令替换时换行符会丢失?

我有一个名为 links.txt 的文本文件,它看起来像这样

link1
link2
link3
Run Code Online (Sandbox Code Playgroud)

我想逐行遍历这个文件并对每一行执行一个操作。我知道我可以使用 while 循环来做到这一点,但由于我正在学习,我想使用 for 循环。我实际上使用了这样的命令替换

a=$(cat links.txt)
Run Code Online (Sandbox Code Playgroud)

然后像这样使用循环

for i in $a; do ###something###;done
Run Code Online (Sandbox Code Playgroud)

我也可以做这样的事情

for i in $(cat links.txt); do ###something###; done
Run Code Online (Sandbox Code Playgroud)

现在我的问题是当我在变量 a 中替换 cat 命令输出时,link1 link2 和 link3 之间的换行符被删除并被空格替换

echo $a
Run Code Online (Sandbox Code Playgroud)

产出

链接1 链接2 链接3

然后我使用了 for 循环。当我们执行命令替换时,是否总是用空格替换新行?

问候

shell command-substitution newlines

48
推荐指数
3
解决办法
10万
查看次数

了解反引号 (`)

我正在尝试命令

$ b=5; echo `$b`;
-bash: 5: command not found
Run Code Online (Sandbox Code Playgroud)

但它没有像预期的那样打印 5。我在这里缺少什么?

`(反引号/反引号)在命令中是什么意思?似乎说`评估其中的命令并用输出替换它们。

shell bash command-substitution

45
推荐指数
3
解决办法
9万
查看次数

带有命令替换的赋值中的嵌套双引号

超过 3.5K 票的StackOverflow答案具有用于分配给DIR当前 bash 脚本目录的单行:

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Run Code Online (Sandbox Code Playgroud)

我对嵌套的双引号感到困惑。据我所知,以下片段是双引号的:

"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
Run Code Online (Sandbox Code Playgroud)

...以及=(即$( dirname))右侧的所有其他内容均未加引号。换句话说,我假设第 2、第 4 和第 6 个"字符分别“关闭”第 1、第 3 和第 5 个"字符。

我明白双引号的作用"${BASH_SOURCE[0]}",但是另外两对双引号的目的是什么?

另一方面(尽管投票得分很高),如果上面的片段不正确,那么实现其名义意图的正确方法是什么?

名义意图我的意思是:将pwdfirst cd-ing后返回的值收集到 返回的目录中dirname "${BASH_SOURCE[0]}",并cd在子 shell 中执行-ing,以便$PWD父 shell 的 保持不变)。

shell bash quoting command-substitution

35
推荐指数
2
解决办法
1万
查看次数

Bash multiplication and addition

for k in {0..49};
do
a=$(($((2*$k))+1));
echo $a;
done
Run Code Online (Sandbox Code Playgroud)

Hi, I need a simplified expression for the third line, maybe one that does not use command substitution.

scripting bash command-substitution

35
推荐指数
3
解决办法
12万
查看次数

命令替换:在换行符而不是空格上拆分

我知道我可以通过多种方式解决这个问题,但我想知道是否有办法只使用 bash 内置函数来解决这个问题,如果没有,最有效的方法是什么。

我有一个包含类似内容的文件

AAA
B C DDD
FOO BAR
Run Code Online (Sandbox Code Playgroud)

我只是指它有几行,每行可能有也可能没有空格。我想运行一个命令

cmd AAA "B C DDD" "FOO BAR"
Run Code Online (Sandbox Code Playgroud)

如果我使用cmd $(< file)我得到

cmd AAA B C DDD FOO BAR
Run Code Online (Sandbox Code Playgroud)

如果我使用cmd "$(< file)"我得到

cmd "AAA B C DDD FOO BAR"
Run Code Online (Sandbox Code Playgroud)

如何让每一行都处理一个完全相同的参数?

bash command-substitution

32
推荐指数
3
解决办法
4万
查看次数