reading a line from file using shell script
我在一个文件中存储了带端口的ip地址,我想用shell脚本读取它。 因此,文件serverIP具有数据192.168.1.17:3000。 我正在使用以下bash脚本来阅读它
1 2 3
| IPAddressFile=/home/geo/serverIP
SERVER_IP_PORT=$(<$IPAddressFile)
echo $SERVER_IP_PORT |
但是这个脚本echo是空字符串。 我在哪里弄错了?
-
无法使用您显示的命令进行复制。 您是否将脚本复制粘贴到问题中? 如果没有,脚本中的所有拼写是否正确?
-
可能重复。 请参考这个anser:如何将文件读入shell中的变量?
-
不,我在给定的接受答案中遵循相同的代码,但它不适用于我的情况,这就是我发布此问题的原因
-
你是如何运行脚本的? 如果您运行sh yourscript,它将不具有仅限bash的扩展名,例如$(<...); 必须使用bash作为shell调用它。
-
是的我正在运行sh scriptfile
-
别。 如果要使用bash语法,则必须bash scriptfile,或者使用#!/bin/bash shebang将其设置为可执行文件并运行./scriptfile。
-
谢谢查尔斯这是问题。
如果您打算使用像$(<...)这样的仅使用bash的语法,那么您的脚本必须使用bash运行,而不是sh。
因此,运行bash yourscript或添加#!/bin/bash(或类似的)shebang,标记文件可执行文件,并将其作为命令调用,例如./yourscript
作为一种既有效又与POSIX sh兼容的替代方案:
1
| IFS= read -r SERVER_IP_PORT <"$IPAddressFile" |
-
什么? Charles Duffy没有使用"${IPAddressFile}"?
-
@ hek2mgl,...我什么时候支持在正确性或清晰度不必要的情况下使用括号?你一定在想别人。 :)
-
日冰。不知道这是你对此的看法:)我的意思是,他们在这里是不必要的(这需要我一个测试),但是总是使用它们不是一个好习惯吗? (它对你的手指肌肉也有好处,至少在德国键盘上)
-
...现在,与我不同的是,没有向OP讲述他们对自定义变量的全部大写名称的使用:)
-
......但是重新说:"总是使用它们的良好做法",我不知道任何流行的观点。有时它们必须被使用 - 如果你将扩展与变量名中有效的尾随字符连接起来;或者如果你想参数化你的扩展 - 但是否则它是一种风格选择。
-
我在想,当人们只是因此使用它们时,他们将永远不必花时间思考他们是否必须使用它们,或者忘记它们。它提供了更清晰的代码整体画面。
-
点点头,这是一个非常可靠的立场;我当然不会说你错了。 OTOH,我现在在Stack Overflow之外编写的大多数shell脚本都嵌入在Nix代码中,并且Nix使用${...}作为转义将Nix表达式嵌入到字符串中,除非转义为''${...} - 所以它是在我的现实世界中遵循这一惯例会有点痛苦。