第一篇文章。重擊新手。找不到有效的解決方案。
尋找一種有效的決議方法/替代方法
我最初的嘗試:( 感謝@larks編輯)
services=($($PSQL "SELECT array(select name from services);"))
echo ${services[@]}
>array -------------------------------- {Shampoo,Dying,Long-cut} (1 row)
echo ${#services[@]}
>5
echo ${services[2]}
>{Shampoo,Dying,Long-cut}
我希望最終得到一個與下面的陣列相同的陣列,但在此程序中不創建 csv。
echo $($PSQL "\copy (select name from services) to 'services.csv';")
readarray arr -t a < services.csv
echo ${arr[@]}
>Shampoo Dying Long-cut
echo ${#services[@]}
>3
uj5u.com熱心網友回復:
您的services變數不是陣列;要創建一個陣列,您需要用 . 包圍該值(...)。例如,比較這個:
$ example=$(echo one two three)
$ echo ${example[0]}
one two three
有了這個:
$ example=( $(echo one two three) )
$ echo ${example[0]}
one
因此,假設您的$PSQL命令以適當的格式生成輸出,您需要:
services=( $($PSQL "SELECT array(select name from services);") )
對于您在問題中嘗試執行的操作,我認為沒有任何理由使用該array功能。給定這樣的表:
CREATE TABLE services (
id serial primary key,
name text
);
INSERT INTO services (name) VALUES ('foo');
INSERT INTO services (name) VALUES ('bar');
INSERT INTO services (name) VALUES ('qux');
像這樣的查詢將產生可修改為 bash 陣列的結果:
$ psql -t --csv -U postgres -d arraytest -c 'select name from services'
foo
bar
qux
在 bash 腳本中:
services=( $(psql -t --csv -U postgres -d arraytest -c 'select name from services') )
for service in "${services[@]}"; do
echo "SERVICE: $service"
done
產生:
SERVICE: foo
SERVICE: bar
SERVICE: qux
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/466254.html
上一篇:如何匹配訪問過的常見城市
