簡體   English   中英

如何在shell腳本中的變量中收集多行

[英]How to collect multiple lines in a variable in shell script

我想用 for 循環在變量中存儲多行。

我正在使用下面的代碼,但沒有得到預期的結果。

start=720000003999086110
end=720000003999086119

for((c=$start; c<= $end; c++))


do
    list= lookupSerialNumber $c
    done

我希望將以下值存儲在一個變量中,然后我將在我的應用程序 CLI 中使用該變量。

lookupSerialNumber 720000003999086110
lookupSerialNumber 720000003999086111
lookupSerialNumber 720000003999086112
lookupSerialNumber 720000003999086113
lookupSerialNumber 720000003999086114
lookupSerialNumber 720000003999086115
lookupSerialNumber 720000003999086116
lookupSerialNumber 720000003999086117
lookupSerialNumber 720000003999086118
lookupSerialNumber 720000003999086119
 ... 

下面是我的應用程序 cli 代碼,

 /opt/vs/bin/vscli -u $username -p $password <<EOF 
 +voucher,main,setup,lookupAndUpdate 
 +config 
 $list 
 exit 
 EOF

請幫我解決這個問題。

創建變量$list

list=$(printf 'lookupSerialNumber %s\n' $(seq "$start" "$end"))
printf -v list 'lookupSerialNumber %s\n' $(seq "$start" "$end")

后者將在末尾有一個額外的換行符,您可以刪除它: ${list%$'\\n'}


您可以在 here-docs 中使用命令替換$(...)

cat <<EOF
...
$(printf 'lookupSerialNumber %s\n' $(seq "$start" "$end"))
...
...
EOF

您應該附加到先前的結果。 我不確定我是否理解你。 如果要存儲該命令,可以使用:

start=720000003999086110
end=720000003999086119
list=""

for ((c=$start; c<= $end; c++))
do
    list="$list lookupSerialNumber $c"
done

否則,如果要存儲該命令的執行結果,代碼可能是:

start=720000003999086110
end=720000003999086119
list=""

for ((c=$start; c<= $end; c++))
do
    list="$list $(lookupSerialNumber $c)"
done

您還可以將數組用於所有這些。 有幾種方法可以解決這個問題。 最好的將取決於您將對該數據進行的使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM