我想從循環中導出變量。我無法做到。我不確定這裏缺少什麼。從while循環中導出變量
任何建議將是巨大的幫助
var="ahs tcs amq tos"
for i in ${var}
do
${i}_log="/var/tmp/pmp_${i}_log"
#export ${i}_log
done
我想從循環中導出變量。我無法做到。我不確定這裏缺少什麼。從while循環中導出變量
任何建議將是巨大的幫助
var="ahs tcs amq tos"
for i in ${var}
do
${i}_log="/var/tmp/pmp_${i}_log"
#export ${i}_log
done
的想法是正確的,只是使用declare
變量來動態創建變量。還應避免使用未引用的變量擴展(for i in ${var}
)進行循環。使用合適的陣列語法
var=("ahs" "tcs" "amq" "tos")
for i in "${var[@]}"; do
declare ${i}_log="/var/tmp/pmp_${i}_log"
export "${i}_log"
done
作爲一個側面說明了很好的做法,始終指定解釋器來運行你的腳本。這可能是#!/bin/bash
或#!/bin/sh
或做就做最好由#!/usr/bin/env bash
另一種可能是使用一個單一的出口關聯數組,而不是多個變量:
編輯:哎呀,這是不行的,因爲數組不能出口。 :\
var="ahs tcs amq tos"
declare -A logs
for i in ${var}
do
logs[$i]="/var/tmp/pmp_${i}_log"
done
echo ${logs[@]}
#### export logs
另請參閱Inian's answer,以獲取更好的循環和數組實踐。
這部作品破折號和bash(只要我的,對他們插值到路徑是合理的):
#!/bin/sh
var="a b c d"
for i in $var
do
export "${i}_log=/var/tmp/pmp_${i}_log"
#test
sh -c "echo \$${i}_log"
done
我試過這個,它給了我期望..結果...感謝您的幫助 –
@SunilSharma我不需要感謝:D給我你的upvotes和接受! :d – PSkocik
這可以在一個行完成沒有環
printf '%s\n' {ahs,tcs,amq,tos} | xargs -I {} bash -c 'export {}_log="/var/tmp/pmp_{}_log"; echo {}_log=${{}_log}'
或循環
#!/bin/bash
for i in {ahs,tcs,amq,tos}; do
#export
export "${i}_log=/var/tmp/pmp_${i}_log";
#test
bash -c 'echo '"${i}_log"'='"\$${i}_log"; done
done
失敗的原因${i}_log="/var/tmp/pmp_${i}_log"
是因爲${i}_log
未加引號,輸出語法爲export somevar=somedefintion
。爲了動態生成變量名稱,請將語句用引號括起來以便插入。即。 export "${dynamic}_var=${dynamic}_definition"
是'$ i'你希望它是價值?也許你應該「回聲」以確保。 – jww