首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选项卡缩进的if语句在命令行上失败,但在bash脚本中工作。

选项卡缩进的if语句在命令行上失败,但在bash脚本中工作。
EN

Stack Overflow用户
提问于 2020-01-30 23:57:35
回答 2查看 1.1K关注 0票数 0

我使用缩进选项卡在文本编辑器中编写脚本,因为键入1 Tab比4 Space更容易。然而,我只是想弄清楚为什么下面的if语句(它在我的bash脚本中工作)不能在命令行上工作,这让我自己发疯了:

代码语言:javascript
复制
dirs=(HIC11490 HIC11493 HIC11494)
for i in "${dirs[@]}"; do
    if [ -d "$i" ]; then 
        echo $i exists; 
    else 
        echo $i does not exist;
    fi
done

具体来说,它列出了工作目录中的所有文件:

代码语言:javascript
复制
$ nums=(HIC11490 HIC11493 HIC11494)
$ for i in "${nums[@]}"; do
> if [ -d "$i" ]; then
>
Display all 13526 possibilities? (y or n)
14295291/                                    HIC3958/
AG25/                                        HIC3959/
AG36/                                        HIC3969/
AG48_Aleksei/                                HIC397/
BGS-11/                                      HIC3970/
BSCC/                                        HIC3971/
  .                                            .
  .                                            .
  .                                            .
DNA128/                                      HIC4465/
DNA129/                                      HIC4466/
> ot exist;
> fi
> done
-bash: ot: command not found
-bash: ot: command not found
-bash: ot: command not found

事实证明,制表符是问题所在,如果用空格替换这些选项卡,代码可以从命令行工作。

bash脚本中是否还有与我应该知道的命令行不同的其他字符?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-31 00:27:51

tab发送到bash将触发自动完成。两个tab字符触发显示所有可能的完成。Bash看到您开始输入for i in "${nums[@]}"; do,然后输入两个tab触发器自动完成。在这种情况下,由于找不到与注册完成匹配的内容,所以大多数自动完成脚本都会列出当前目录中的所有文件。如果列表比某个长度长,则会显示一个Display all 13526 possibilities?问题。然后从输入中读取字符以回答Display all 13526 possibilities? (y or n)部分(即。echo将作为这个问题的答案通过.)剧本就分崩离析。

这都是可配置的。Bash使用GNU读出线库读取您键入的内容和自动完成的库句柄(部件)。

票数 2
EN

Stack Overflow用户

发布于 2020-01-31 06:12:06

要回答您问题的第二部分(因为KamilCuk已经回答了第一部分),您应该注意的其他字符是#!

在脚本(非交互式shell )中,#引入一个注释,而在交互式shell中,您可以配置(不管情况是否如此),也可以在命令开始时将散列视为有效字符。这由shoptshopt设置控制。

在交互式shell中,!引入历史替换(即用最近命令的最后一个参数替换!$ )。此替换不发生在bash脚本中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59996238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档