Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Bash脚本中内部引用数据_Bash_Unix - Fatal编程技术网

在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”