You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:04:51