如何将命令输出分配给变量

时间:2015-04-03 21:47:08

标签: bash shell

我想将以下命令的输出分配给shell中的变量:

${arr2[0]} | rev | cut -c 9- | rev 

例如:

mod=${arr2[0]} | rev | cut -c 9- | rev 
echo $mod

上述方法无效:输出为空白。

我也尝试过:

mod=( "${arr2[0]}" | rev | cut -c 9- | rev )

但我收到错误:

34: syntax error near unexpected token `|'
line 34: `  mod=( "${arr2[0]}" | rev | cut -c 9- | rev )   '

2 个答案:

答案 0 :(得分:1)

your correct answer添加解释

您必须将变量赋值与 command substitutionvar=$(...)结合起来,以便在变量中捕获命令的(stdout)输出。

相比之下,您的原始命令在var=(...)之前只使用 $ - 没有( - 用于创建数组 [1] ( ... )内的每个标记都成为它自己的数组元素 - 这显然不是你的意图

至于为什么你的原始命令破坏了

(...)内的令牌符合通常的shell expansions ,因此符合通常的引用要求。

因此,使用$和所谓的shell 元字符| & ; {{1在您的数组元素中{}} ( ) < > space)作为 literals ,您必须 引用他们,例如,通过预先tab

除了\$space之外的所有这些字符 - 在不加引号时会导致语法错误,这就是您的案例中发生的情况(您没有引用{{1} } chars。)

[1]在tab以及|bash中。 POSIX shell规范。根本不支持数组,所以这个语法总是在POSIX-features-only shell中断。

答案 1 :(得分:0)

mod=$(echo "${arr2[0]}" | rev | cut -c 9- | rev )   
echo "****:"$mod

mod=`echo "${arr2[0]}" | rev | cut -c 9- | rev`   
echo "****:"$mod