Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命令中带有管道、引号等的Bash变量_Bash_Variables_Pipe - Fatal编程技术网

命令中带有管道、引号等的Bash变量

命令中带有管道、引号等的Bash变量,bash,variables,pipe,Bash,Variables,Pipe,我有一个用于获取hostname.localdomain的命令: dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }' 这会很好地返回如下结果: michael.lawler.localdomain.com 我想在Bash脚本中进一步使用该结果作为变量 我似乎很难通过第一根管子 如果IVA

我有一个用于获取hostname.localdomain的命令:

dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'
这会很好地返回如下结果:

michael.lawler.localdomain.com

我想在Bash脚本中进一步使用该结果作为变量

我似乎很难通过第一根管子

如果I
VAR=“dig axfr@dc1.localdomain.com localdomain.com | grep-I Lawler | awk'{getline;$1=substr($1,1,length($1)-1);打印$1;退出}'


…我拿回了整个区域转移。我还尝试了许多小的更改,在
dig
命令之前添加了
$
,没有引号,但似乎没有任何效果。如何解决此问题?

使用倒钩代替引号:

VAR=`dig axfr @dc1.localdomain.com localdomain.com | grep -i Lawler | awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }'`

Backtics实际上是指“运行此处的任何内容,并将标准输出作为表达式的值返回”,但引号不能这样做。

如果您的目标是存储命令以多次运行它,请参见(“我试图将命令放入变量中,但复杂情况下总是失败!”)。如果您的目标只是存储输出,
var=$(command)
FYI——您可以要求
dig
为您提供较少的信息,使输出更易于解析。例如,请参阅
+short
选项。@CharlesDuffy
awk'{getline;$1=substr($1,1,length($1)-1);print$1;exit}'
满足我的需要,
+short
实际上不适合我的情况,不确定原因。。可能是因为OSX。不过谢谢你的建议。两个答案都提供了预期的效果。关于哪一个更容易受到未来复杂性的影响,有什么想法吗?我想接受一个能提供最宽容的灵活性的。感谢使用
$()
的可能的重复通常比反向标记更可取,因为反向标记不会嵌套。backticks的可移植性稍高一些,但是
$()
符号已经是标准的大约20年了,大多数shell都接受它。两者都很好地工作。我认为这种方法最容易记住,在许多系统上都能很好地工作。正如珀塞尔指出的,它不会筑巢,但我认为在这种情况下这不是一个问题。不过,你可以将$()嵌套在backtics中,所以这不像是一条死胡同。也就是说,我不认为真的有一个明确的赢家。
VAR=$( dig axfr @dc1.localdomain.com localdomain.com |
     grep -i Lawler |
     awk '{ getline ; $1=substr($1,1,length($1)-1); print $1 ; exit }' )