'[[ 1' -gt 0 ']]' 命令未找到,set -x 未显示特殊字符

'[[ 1' -gt 0 ']]' command not found, no special character shown by set -x

提问人:Yama 提问时间:7/11/2023 最后编辑:Yama 更新时间:7/11/2023 访问量:69

问:

在编写带有命令行参数的 bash 脚本时,我使用以下结构:

#!/bin/bash
set -e

extension=".fna.gz"
declare -A genomes_completeness
declare -a genomes
declare -a completeness


Help() {
echo "help message"
}

#set default values of variables and declare types
foo=bar

if [ $# -eq 0 ]
then
        Help
        exit
fi

while [[ $# -gt 0 ]]
do
        case $1 in
        -f | --foo) foo="$2"
        shift 2;;
        -b | --bar) bar="$2"
        shift 2;;
        -h | --help) Help; exit;;
        -* | --*) unknown="$1"; echo -e "Unknown option: ${unknown}"; Help; exit 1;;
        *) shift;;
        esac
done

它运行良好,我正在编写另一个,但在执行没有参数或标志的脚本时检查帮助消息是否正确显示时偶然发现了此错误:help

bash /path/script.sh --help

+ extension=.fna.gz
+ declare -A genomes_completeness
+ declare -a genomes
+ declare -a completeness
+ '[' 1 -eq 0 ']'
+ '[[ 1' -gt 0 ']]'
/path/script.sh: line 28: [[ 1: command not found

在寻找错误一段时间后(呵呵),我只是复制粘贴了另一个脚本的(仅那一行),然后它起作用了。while ...

我完全是在带有 nano 的 linux 上手动编写的脚本,所以我不知道我是否插入了一个特殊字符(以及如何插入)。如果有一个特殊字符,它会显示吗?该错误的其他可能来源是什么?set -x

我希望这个问题被正确提出。

bash while循环

评论

2赞 Ted Lyngmo 7/11/2023
这不是我从该脚本中获得的输出。 等等甚至都不存在于脚本中,因此,您没有运行在此处粘贴的脚本。extensiongenomes_completeness
3赞 tjm3772 7/11/2023
'[[ 1'在调试输出中,指示将 AND 视为单个令牌。这不应该发生在标准环境中。这真的是你运行的整个脚本吗?[[$#
2赞 Charles Duffy 7/11/2023
那么前面的“不间断空格”就是你的答案。但关于“可能”的猜测是值得怀疑的话题;粘贴相似的字符是错别字,由错别字引起的问题是偏离主题的。
1赞 Charles Duffy 7/11/2023
...但确实会产生更好的错误消息,即使它不会改善 xtrace 输出; 比LC_ALL=Cbash: $'[[\302\240hello': command not foundbash: [[ hello: command not found
1赞 Barmar 7/11/2023
确保在编辑程序时禁用所有“智能”转换。最好使用 IDE 而不是文字处理器,它们是为文本设计的。

答:

0赞 jhnc 7/11/2023 #1

键入可以插入不间断空格字符。通常,密钥被映射为“Compose”。ComposeSpaceSpaceAltGr

某些系统还会在键入时插入不间断空格Shift + Space

在 linux 上,可能会显示配置并包含有关配置不间断空格输入的信息。setxkbmap -printman 7 xkeyboard-config

评论

0赞 Yama 7/12/2023
我想它一定是 +,因为我确实需要得到空格之后的那个。标记为答案,因为它最有可能发生。shiftspaceshift#$