Bash v3脚本多行粘贴输入添加>前缀显示问题
解决Bash v3(macOS)多行粘贴时
read提示符不重复显示的问题 这个问题我之前也碰到过,核心原因是read -p的提示符只会在第一次等待用户输入时打印一次。当你粘贴多行文本时,后续的行是直接通过输入流批量传入的,不会触发read重新输出提示符,所以才会出现只有第一行有>前缀的情况。
修正后的脚本
#!/bin/bash echo "Provide inputs:" until [[ "$message" = "three" ]]; do echo -n "> " # 主动打印提示符,-n 确保不换行 read -r message # -r 禁止反斜杠转义,保留输入原始格式 myArray+=("$message") # 用引号包裹,避免含空格的输入被拆分成多个数组元素 done
关键改动说明
- 替换
read -p为主动打印提示符:放弃read -p的内置提示符功能,改用echo -n "> "在每次读取前主动输出前缀。这样不管是手动输入还是粘贴的每一行,都会先看到>提示符,再显示输入内容。 - 添加
read -r选项:macOS的Bash v3默认会把输入中的反斜杠当作转义字符(比如输入hello\world会变成helloworld),-r选项可以禁用这个行为,完整保留用户输入的原始格式。 - 数组元素用引号包裹:原脚本中
myArray+=($message)如果遇到含空格的输入行(比如hello world),会被拆分成两个数组元素。用myArray+=("$message")可以确保每一行作为一个完整的元素存入数组。
验证效果
粘贴多行输入时,终端显示会和手动输入完全一致:
Provide inputs: > one > two > three
内容的提问来源于stack exchange,提问作者NomadGnome
相关产品推荐
相关产品推荐

