我想将以下命令的输出分配给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 ) '
答案 0 :(得分:1)
向your correct answer添加解释:
您必须将变量赋值与 command substitution(var=$(...)
)结合起来,以便在变量中捕获命令的(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