标签: shopt

ash 是否与 bash 的“nullglob”选项等效?

如果 glob 模式不匹配任何文件,bash将只返回文字模式:

bash-4.1# echo nonexistent-file-*
nonexistent-file-*
bash-4.1#
Run Code Online (Sandbox Code Playgroud)

您可以通过设置nullglobshell 选项来修改默认行为,因此如果没有匹配项,您将获得一个空字符串:

bash-4.1# shopt -s nullglob
bash-4.1# echo nonexistent-file-*

bash-4.1# 
Run Code Online (Sandbox Code Playgroud)

那么在 中有一个等效的选项ash吗?

bash-4.1# ash
~ # echo nonexistent-file-*
nonexistent-file-*
~ # shopt -s nullglob
ash: shopt: not found
~ # 
Run Code Online (Sandbox Code Playgroud)

bash shell scripting shopt

6
推荐指数
2
解决办法
2488
查看次数

nullglob 禁用路径名制表符补全

我发现这shopt -s nullglob显然禁用了文件和目录的制表符完成,并shopt -u nullglob恢复了它。为什么目录的制表符完成显然依赖于nullglob未设置?

4.2.37(1)-release在 Debian 7 上使用 Bash 。

bash glob autocomplete bash-completion shopt

5
推荐指数
1
解决办法
254
查看次数

在终端中设置的 globstar 未传播到脚本

我需要使用随源提供的 build.sh 构建一个库。它包含一个 globstar 路径 ( src/**/*.java)。我启用了 globstarshopt -s globstar并且所有工作都很好地从终端但是从 bash 文件:

#!/bin/bash
ls **/*.java
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ls: cannot access **/*.java: No such file or directory
Run Code Online (Sandbox Code Playgroud)

bash shell shopt

4
推荐指数
1
解决办法
827
查看次数

bash for循环没有文件

当我循环浏览所有文件时,foo我会这样做

for f in foo* ; do echo "result = $f" ; done
Run Code Online (Sandbox Code Playgroud)

问题是当我没有文件开始时foo:

result = foo*
Run Code Online (Sandbox Code Playgroud)

意味着循环执行一次,即使没有文件开始foo.

这怎么可能?如何循环遍历所有文件(如果没有文件则不循环)?

bash for-loop wildcard shopt

4
推荐指数
2
解决办法
146
查看次数

如何在 Bash 中禁用 shopt 选项?

shopt例如,如何禁用选项extglob

我的.bashrc文件中有这个:

shopt -s extglob
Run Code Online (Sandbox Code Playgroud)

bash shopt

3
推荐指数
1
解决办法
2640
查看次数

设置 nullglob 时不会取消关联数组

当我在 bash 中设置 nullglob 时:

shopt -s nullglob
Run Code Online (Sandbox Code Playgroud)

然后声明一个关联数组:

declare -A arr=( [x]=y )
Run Code Online (Sandbox Code Playgroud)

我无法取消设置数组中的特定键:

unset arr[x]
echo ${#arr[@]} # still 1
Run Code Online (Sandbox Code Playgroud)

但是,取消设置nullglob使此操作像我期望的那样工作:

shopt -u nullglob
unset arr[x]
echo ${#arr[@]} # now it's 0; x has been removed
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我不明白 shell globbing 如何与这种情况相关。我已经在 bash 4.4.19 和 5.0.0 上测试过了。

bash quotes associative-array glob shopt

3
推荐指数
1
解决办法
178
查看次数

由带引号和不带引号的部分组成的字符串中的通配符扩展(通配)

我在 shell 脚本中有一行如下所示:

java -jar "$dir/"*.jar
Run Code Online (Sandbox Code Playgroud)

,因为我只想执行该文件夹中碰巧命名的任何 jar 文件。但这并不像我预期的那样工作。我收到错误消息:

Error: Unable to access jarfile [folder-name]/*.jar
Run Code Online (Sandbox Code Playgroud)

它按字面意思使用“*”字符,而不是进行我想要的替换。我该如何解决?

编辑:它现在正在工作。我只是有错误的文件夹前缀:/对于任何想知道的人,这是正确的方法。

bash shell glob quoting shopt

2
推荐指数
2
解决办法
1656
查看次数