以下 bash 脚本的目标是读取 CSV 文件 ( all_words.CSV ) 并打印参数和值,但我遇到了一个非常奇怪的问题。
当我运行脚本时,所有单词参数 (word1-word8
) 都被打印了 - 直到现在一切都很好!当我想打印为 word1=$word1
在函数之外然后由于某种原因 word1 没有得到值
?
为什么所有参数(word1-word8
)都在函数中打印值,而当我想在函数外打印word1
时,然后word1
没有值(value)?
我尝试使用导出命令,但没有帮助; 导出 word1=$word1
请指教怎么办?这里有什么问题?
#!/bin/bash
read_csv ()
{
CSV_LINE=2
vars=()
c=1
while IFS=, read -ra arr; do
if ((c==1)); then
vars+=("${arr[@]}")
elif ((c==CSV_LINE)); then
for ((i=0; i<${#arr[@]}; i++)); do
declare ${vars[$i]}="${arr[$i]}"
done
fi
((c++))
done < all_words.CSV
echo CSV_LINE=$CSV_LINE
echo word1=$word1
echo word2=$word2
echo word3=$word3
echo word4=$word4
echo word5=$word5
echo word6=$word6
echo word7=$word7
echo word8=$word8
}
read_csv
echo word1=$word1
.
more all_words.CSV
word1,word2,word3,word4,word5,word6,word7,word8
&^#G TR /erfernfjer *&^NHY " "" ? / $@H,@Y^%" E "R$%*&*UJ,**U&^#%%@$^&// \\,^T%!#&^YG.+___KI*&HHTY,%%@$#!%^#&,P/\06E87*UHG11#
,edehu234#@!&,~hum&T%6e4
脚本输出示例:
./readWords_from_csv.bash
CSV_LINE=2
word1=&^#G TR / erfernfjer *&^NHY " "" ? / $@H
word2=@Y^%" E "R$%*&*UJ
word3=**U&^#%%@$^&//\\
word4=^T%!#&^YG.+___KI*&HHTY
word5=%%@$#!%^#&
word6=P/\06E87*UHG11#
word7=edehu234#@!&
word8=~hum&T%6e4
word1=
最佳答案
man bash
在declare
下解释:
When used in a function,
declare
makes NAMEs local, as with thelocal
command.
关于linux - bash 脚本 - 为什么在函数下设置值而不在函数外设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910425/