我本质上是试图将 shell 命令输出的某些部分分配给多个变量,但我不知道该怎么做。
为了简单起见,假设 shell 上的命令在执行时打印
one two three four
可以用一个模拟
echo "one two three four"
(虽然实际的命令不同)
现在,我想分配输出的第二个和第四个字(在本例中为二和四) 到变量w1和w2。
我想我可以使用读像这样命令:
echo "one two three four" | awk '{print $2 " " $4}' | read w1 w2
但这不起作用,可能是因为读命令在子进程中执行。
那么,我该如何实现我所追求的目标呢?
答案1
这是行不通的,因为它read
在子进程中运行,不能影响父进程的环境。
您有几个选择:
您可以将命令转换为:
w1=$(echo "one two three four" | awk '{print $2}')
w2=$(echo "one two three four" | awk '{print $4}')
或者,更改 IFS 并使用set
:
OIFS="$IFS"
IFS=' '
set -- $(echo "one two three four" | awk '{print $2" "$4}')
IFS="$OIFS"
w1=$1 w2=$2
或者这里的字符串:
read w1 w2 w3 w4 <<< "one two three four"
答案2
该示例从文件password.txt中获取密码1和2
密码.txt
密码1:密码2:密码3:列jnAKcxu7tyLa7DJa:nn53tSnuJJxmYbEN:97m8crLrF3ap9y9R:列表密码
珍妮:37 约翰:40
read pass1 pass2 <<< $(awk -F: '/listpassword/{ print $1,$2; }' password.txt)