我有一個 while 回圈,需要將回圈的結果附加到 bash 腳本中的串列(如在 python 中)。怎么做。我創建了一個陣列,但其中沒有逗號。它只有空格,但我想要逗號,以便我可以在 .env 檔案中使用它們
arr=()
while [ ]
do
........
........
........
val='some value'
arr =$val
done
echo ${arr}
輸出:
('some value1' 'some value2' 'some value3')
預期結果:
['some value1','some value2','some value3']
uj5u.com熱心網友回復:
這是一種想法/方法。
#!/usr/bin/env bash
arr=()
while IFS= read -r val; do
arr =("'$val'")
done < <(printf '%s\n' 'foo bar' 'baz more' 'qux lux')
(IFS=,; printf '[%s]' "${arr[*]}")
輸出
['foo bar','baz more','qux lux']
uj5u.com熱心網友回復:
從您的預期輸出開始,您在這里遇到了許多問題。該命令echo ${arr}受到損壞的參考,無論如何只列印陣列的第一個元素;您期望的輸出看起來像 Python 表示串列的方式,但 Bash 只會以您指定的任何格式列印值本身,而沒有您自己沒有放置的任何顯式格式。
要列印陣列,請嘗試
printf '%s\n' "${arr[@]}"
要在每個值周圍列印具有顯式格式的陣列,請嘗試例如
printf "['%s'" "${arr[0]}"
printf ",'%s'" "${arr[@]:1}"
printf ']\n'
現在,首先要正確構建陣列,您必須添加到陣列,而不是添加到第一個元素。
arr=()
while true; # not while [ ]
do
........
arr =('some value') # use parentheses
done
要VARIABLE_VALUE=在輸出之前添加,只需 ... 這樣做。
printf "VARIABLE_VALUE=['%s'" "${arr[0]}"
printf ",'%s'" "${arr[@]:1}"
printf ']\n'
uj5u.com熱心網友回復:
這是使用的解決方案echo:
arr=()
while [ ... ]
do
........
........
........
val='some value'
arr =("$val") # () and "" added
done
# print each value protected by "" and separated by ,
first=true
echo -n "arr values = [ "
for v in "${arr[@]}" ; do
if $first ; then first=false ; else echo -n ", " ; fi
echo -n "\"$v\""
done
echo " ]"
# Another way to print arr values
declare -p arr
要將陣列值寫入 python 檔案,您可以嘗試以下操作:
dest="somefile.py"
{
first=true
echo -n "arr = [ "
for v in "${arr[@]}" ; do
if $first ; then first=false ; else echo -n ", " ; fi
echo -n "\"$v\""
done
echo " ]"
} >| "$dest"
請注意,它是脆弱的,如果v包含". 這里給出了一個帶有運算子@Q(搜索引數轉換man bash)的解決方案:
dest="somefile.py"
{
first=true
echo -n "arr = [ "
for v in "${arr[@]}" ; do
if $first ; then first=false ; else echo -n ", " ; fi
echo -n "${v@Q}" # operator @Q
done
echo " ]"
} >| "$dest"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350256.html
標籤:猛击
上一篇:向GNU并行轉發空引數不起作用?
