将变量拆分为多个变量

时间:2014-12-16 14:04:27

标签: linux bash shell

我知道之前已经问过这个问题,但答案并不能完全满足我的需求。我为一个给定的字符串pgrep,它返回一个PID列表,其中包含变量中的字符串(在本例中为$ testpid)。然后我尝试将每一个PID分开,它们用这样的空间进行分离:

PIDS:

17717 172132 2138213

代码:

IFS=" " read -a pidarray <<< "$testpid"
echo pidarray[0]

*而不是上面的回声我会将数组中的每个项目分配给它自己的变量

但是我收到以下错误:

syntax error: redirection unexpected

2 个答案:

答案 0 :(得分:5)

您的语法几乎正确:

IFS=' ' read -r -a pidarray <<< "$testpid"
echo "${pidarray[0]}"

请注意数组解除引用所需的花括号。

更重要的是,请检查您的shebang是#!/bin/bash,还是使用bash yourscript执行了您的脚本,而不是sh yourscript。给出的错误与无法将<<<识别为有效语法的shell一致 - 任何远程现代bash在作为bash 调用时始终将;即使/bin/sh指向同一个可执行文件,它也会告诉bash禁用POSIX规范中的许多扩展。


现在,这就是说 - 如果您的目标是将每个条目分配给自己的变量,那么您根本不需要(也不应该使用)read -a

相反:

IFS=' ' read -r first second third rest <<<"$testpid"
printf '%s\n' "First PID is $first" "Second PID is $second"

答案 1 :(得分:1)

你可以尝试这个。

testpid="17717 172132 2138213"
set -- $testpid
echo -e $1 $2

之后使用$1,$2,$3分别获取。