如何不使用read关键字读取Bash单行输入?及脚本参数取值问题
问题1:不使用
read读取Bash脚本的单行输入值 以下几种方式可以实现:
- 用命令替换结合
cat捕获输入(会读取所有输入直到EOF,单行输入直接回车即可):input=$(cat) echo "输入内容:$input" - 用
head仅读取第一行输入:input=$(head -n 1) echo "第一行输入:$input" - 直接读取标准输入文件描述符:
input=$(< /dev/stdin) echo "输入内容:$input"
问题2:修正脚本,根据计数器输出对应的文件名
你的脚本无法获取对应文件名,是因为没有正确通过计数器引用位置参数。直接赋值FILE="$counter"只能得到数字,要获取对应位置的参数,有两种常用解决方法:
方法1:使用间接变量引用${!counter}
修改后的脚本:
#!/bin/bash counter=1 while [ $counter -le $# ] do FILE="${!counter}" # 通过计数器间接引用$1、$2等位置参数 echo "$FILE" ((counter++)) done
执行./viewer.sh "sample.txt" "sample1.txt"时,会输出:
sample.txt sample1.txt
方法2:使用eval命令构造参数引用
#!/bin/bash counter=1 while [ $counter -le $# ] do eval "FILE=\$$counter" # 动态构造$1、$2这类参数引用并解析 echo "$FILE" ((counter++)) done
效果与方法1一致。
补充:更简洁的遍历方式
其实不需要计数器,直接用for循环遍历位置参数更简单:
#!/bin/bash for FILE in "$@" do echo "$FILE" done
内容的提问来源于stack exchange,提问作者Dabu
相关产品推荐
相关产品推荐

