在Bash脚本中内部引用数据
以下内容将从外部文件读取并输出数据:在Bash脚本中内部引用数据,bash,unix,Bash,Unix,以下内容将从外部文件读取并输出数据: #!/bin/bash while IFS='|' read hostname nickname; do echo $hostname $nickname done < "list.dat" 但我希望将list.dat实际存储在脚本本身中,而不是外部存储,但不知道如何将其作为变量/数组引用,并从中读取相同的结果…尝试使用: 请尝试使用: 根据需要传递变量或字符串: #!/bin/bash input="firstserver|joe secon
#!/bin/bash
while IFS='|' read hostname nickname; do
echo $hostname $nickname
done < "list.dat"
但我希望将list.dat实际存储在脚本本身中,而不是外部存储,但不知道如何将其作为变量/数组引用,并从中读取相同的结果…尝试使用:
请尝试使用:
根据需要传递变量或字符串:
#!/bin/bash
input="firstserver|joe
secondserver|henry
thirdserver|jack"
while IFS='|' read hostname nickname; do
echo $hostname $nickname
done <<< "$input"
根据需要传递变量或字符串:
#!/bin/bash
input="firstserver|joe
secondserver|henry
thirdserver|jack"
while IFS='|' read hostname nickname; do
echo $hostname $nickname
done <<< "$input"
如果您可以使用bash 4,我将使用关联数组:
declare -A servers=(
["firstserver"]=joe
["secondserver"]=henry
…
)
for hostname in "${!servers[@]}"; do
echo "$hostname" "${servers[$hostname]}"
done
这假设主机名是唯一的。如果您可以使用bash 4,我将使用关联数组:
declare -A servers=(
["firstserver"]=joe
["secondserver"]=henry
…
)
for hostname in "${!servers[@]}"; do
echo "$hostname" "${servers[$hostname]}"
done
这假设主机名是唯一的。这似乎有效,但不适用于输入后的空格和=Fixed,感谢您指出这一点。引用$input也是一个好主意。请记住,bash 4.3之前的版本中存在一个bug,它可能会导致将本地IFS设置与here字符串组合时出现问题。使用here文档可能更安全。bash不会对扩展为here字符串的参数应用分词或路径扩展,因此引号是不必要的。这似乎可以工作,但对输入后的空格和=Fixed无效,感谢您指出。引用$input也是一个好主意。请记住,bash 4.3之前的版本中存在一个bug,它可能会导致将本地IFS设置与here字符串组合时出现问题。使用here文档可能更安全。bash不会对扩展为here字符串的参数应用分词或路径扩展,因此不需要引号。当然,如果您的值不需要包含空格,则使用空格作为分隔符更有意义。你的解决方案也可以,谢谢你的建议,我不知道“here-document”这个词。当然,如果你的值不需要包含空格,那么使用空格作为分隔符会更有意义。那么你根本就不需要纠结于IFS。你的解决方案也很有效,谢谢你的建议,我不知道“heredocument”