![Bash - 从文件中读取行](https://linux22.com/image/1211848/Bash%20-%20%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%E8%AF%BB%E5%8F%96%E8%A1%8C.png)
我有一个单行文件,其中的值以字符串形式存储:
server-name-2009-August-9-AMI
文件名是server_name
。使用 bash 脚本将此值转换为变量的最短、最优雅的方法是什么?
答案1
你可以做一个“有用的猫用途”;)
VAR = $(cat $(dirname $0)/server_name)
这会将位于脚本所在目录中的“server_name”文件的内容放入 $VAR。无论您在何处运行脚本,它都可以正常工作。
答案2
您可以使用该read
命令。如果您不提供任何变量,该行将自动保存到REPLY
Bash 中的变量中。如果您提供单个变量,该行将保存到该变量中。如果您提供多个变量,Bash 会将该行拆分为单词(拆分基于空格),尝试将一个单词放入每个变量中。(如果单词多于变量,则每个变量获得一个单词,但最后一个变量获得该行的其余部分。)
例子:
telemachus ~ $ read < buff
telemachus ~ $ echo $REPLY
#!/usr/bin/env perl
telemachus ~ $ read LINE < buff
telemachus ~ $ echo $LINE
#!/usr/bin/env perl
注意,变量分配时没有使用美元符号(REPLY
或LINE
),但是使用时需要$REPLY
或$LINE
。
因此,你会想要这样的东西:
read SERVER < /path/to/server_name
我建议您使用要读取的文件的完整路径,而不是假设两个脚本位于同一目录中。
我不会发誓这是最优雅的解决方案。