将变量拆分为多个变量

twi*_*igg 6 linux bash shell

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

PIDS:

17717 172132 2138213
Run Code Online (Sandbox Code Playgroud)

码:

IFS=" " read -a pidarray <<< "$testpid"
echo pidarray[0]
Run Code Online (Sandbox Code Playgroud)

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

但是我收到以下错误:

syntax error: redirection unexpected
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

你的语法几乎是正确的:

IFS=' ' read -r -a pidarray <<< "$testpid"
echo "${pidarray[0]}"
Run Code Online (Sandbox Code Playgroud)

请注意数组取消引用所需的花括号.

更重要的是,检查你的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"
Run Code Online (Sandbox Code Playgroud)