简体   繁体   English

oneliner 将输出附加到多个变量

[英]oneliner append output to multiple variables

var=4
com="$(echo "A\nB\nC\nD" | sed 's/\\n/\n/g')"
seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed "s/$/ <<< \"\$(echo \"\$com\")\"/g" 

Above outputs: read var1 var2 var3 var4 <<< "$(echo "$com")" What i want is to execute that command instead of outputing and echo all four set variables using && after it has been executed以上输出: read var1 var2 var3 var4 <<< "$(echo "$com")" 我想要的是执行该命令,而不是在执行后使用 && 输出和回显所有四个设置变量

Tried:尝试:

`seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed "s/$/ <<< \"\$(echo \"\$com\")\"/g"` && echo $var1 $var2 $var3 $var4

Doesn't work不起作用

Tried:尝试:

seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed "s/$/ <<< \"\$(echo \"\$com\")\"/g" | bash 

Above doesn't work because variables are set in seperate session not globally以上不起作用,因为变量不是在全局设置的单独会话中设置的

Tried:尝试:

eval "seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed \"s/$/ <<< \"\$(echo \"\$com\")\"/g"\"  && echo $var1 $var2 $var3 $var4

But doesn't work.但不起作用。 Pleae help needed.需要请帮忙。

Desired output: After all variables set: ABCD期望输出:所有变量设置后:ABCD

seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed "s/$/ <<< \"\$(echo \"\$com\")\" \&\& echo \$var1 \$var2 \$var3 \var4/g" | bash

Above may work but $com is not expanding inside sed以上可能有效,但 $com 未在 sed 内扩展

Finally Got It Worked终于成功了

var=4
com="$(echo "A\nB\nC\nD" | sed 's/\\n/\n/g')"
seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed "s/$/ <<< \"\$(echo `echo $com`)\" \&\& echo \$var1 \$var2 \$var3 \$var4/g" | bash

Finally Solved终于解决了

var=4
com="$(echo "A\nB\nC\nD" | sed 's/\\n/\n/g')"
eval "seq "$var" | sed 's/^/var/g' | xargs  | sed 's/^/read /g' | sed \"s/$/ <<< \$\(echo `echo $com`\) \&\& echo \\\$var1 \\\$var2 \\\$var3 \\\$var4/g\"" | bash

Assumptions:假设:

  • objective is to define and populate four new variables: var1=A , var2=B , var3=C and var4=D目标是定义和填充四个新变量: var1=Avar2=Bvar3=Cvar4=D
  • optionally export the variables可选择export变量

Generating the variable names and values:生成变量名称和值:

$ $ printf "var%s\n" {1..4}
var1
var2
var3
var4

$ printf "%s\n" {A..D}
A
B
C
D

Associate variable names with values:将变量名与值关联:

$ paste <(printf "var%s\n" {1..4}) <(printf "%s\n" {A..D})
var1    A
var2    B
var3    C
var4    D

Short demo of a bash nameref : bash nameref 的简短演示:

$ typeset -p myvar
-bash: typeset: myvar: not found

$ declare -n newvar="myvar"
$ newvar='new_value'

$ typeset -p newvar myvar
declare -n newvar="myvar"
declare -- myvar="new_value"

$ echo "${newvar}"
new_value

$ echo "${myvar}"
new_value

From here we can use a while loop and a nameref to create and populate the new variables:从这里我们可以使用while循环和nameref来创建和填充新变量:

# verify variables do not exist:

$ typeset -p var1 var2 var3 var4
-bash: typeset: var1: not found
-bash: typeset: var2: not found
-bash: typeset: var3: not found
-bash: typeset: var4: not found

# create/populate/export new variables

while read -r name val
do
    declare -n x="${name}"
    export x="${val}"
done < <(paste <(printf "var%s\n" {1..4}) <(printf "%s\n" {A..D}))

# verify variables now exist, are populated and exported (-x):

$ typeset -p var1 var2 var3 var4
declare -x var1="A"
declare -x var2="B"
declare -x var3="C"
declare -x var4="D"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM