如何使用条形图在命令行中为多个变量赋值

如何使用条形图在命令行中为多个变量赋值

我本质上是试图将 shell 命令输出的某些部分分配给多个变量,但我不知道该怎么做。

为了简单起见,假设 shell 上的命令在执行时打印

one two three four

可以用一个模拟

echo "one two three four"

(虽然实际的命令不同)

现在,我想分配输出的第二个和第四个字(在本例中为) 到变量w1w2

我想我可以使用像这样命令:

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)

相关内容