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

以连字符开头的字符串在whiptail中报错,如何不修改原字符串解决?

解决whiptail识别以-开头字符串为选项的问题

问题原因

whiptail会将以-开头的参数解析为命令行选项,当你的字符串"-|foo\n"作为--msgbox的内容参数传入时,它被误识别为一个未知选项,从而抛出-|foo\n: unknown option的错误。

不修改原字符串的解决方案

有两种可靠的方法可以规避这个问题:

方法1:使用--终止选项解析

在传递$str之前加上--,这是大多数命令行工具的标准用法,用来明确告知工具后续的内容均为普通参数,不再解析为选项:

#!/bin/bash

str="-|foo\n"
whiptail --title "test" --msgbox -- "$str" 20 78

方法2:通过标准输入传递内容

利用whiptail支持从标准输入读取消息内容的特性(用-作为内容参数),结合printf处理转义字符后传入:

#!/bin/bash

str="-|foo\n"
printf "%b" "$str" | whiptail --title "test" --msgbox - 20 78

注:printf "%b"会正确解析字符串中的\n转义字符,确保换行符生效。

内容的提问来源于stack exchange,提问作者Logan Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:09:45