[英]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.