标签: shopt

什么扩展到当前目录中的所有文件递归?

我知道**/*.ext扩展到所有匹配的子目录中的所有文件*.ext,但是什么是类似的扩展,包括当前目录中的所有这些文件?

bash shell glob wildcard shopt

87
推荐指数
4
解决办法
3万
查看次数

双星号通配符是什么意思?

我已经尝试了以下命令,但我无法解释它:

ls **
Run Code Online (Sandbox Code Playgroud)

但我不确定它输出的确切原因以及为什么会产生结果.

unix wildcard shopt

48
推荐指数
4
解决办法
3万
查看次数

在shell更新之后,在.bashrc中找不到shopt命令

我已将我的shell更新为ZSH.当我来源〜/ .bashrc.我收到了这个错误

哟医生有一些错误.当我执行此命令

echo "export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules" >> ~/.bashrc && source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

/home/amerrnath/.bashrc:17: command not found: shopt /home/amerrnath/.bashrc:25: command not found: shopt /home/amerrnath/.bashrc:109: command not found: shopt /usr/share/bash-completion/bash_completion:35: parse error near]]"

请帮我解决这个问题

bash sh zshrc shopt

29
推荐指数
6
解决办法
5万
查看次数

使用shell globbing匹配所有嵌套目录下的所有文件

有没有办法使用shell Globbing来识别嵌套目录?

所以,如果我有DIR/DIR1/DIR2/DIR3/dir4/dir5/..和我在所有这些文件,什么是相当于通配符匹配模式下的所有目录中的所有文件,类似 - 例如 - ls -R

linux bash shell shopt

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

有没有一种简单的方法可以为一个glob设置nullglob

在bash中,如果你这样做:

mkdir /tmp/empty
array=(/tmp/empty/*)
Run Code Online (Sandbox Code Playgroud)

你发现array现在有一个元素"/tmp/empty/*",而不是你想要的零.值得庆幸的是,可以使用打开nullglob shell选项来避免这种情况shopt -s nullglob

但是nullglob是全局的,当编辑现有的shell脚本时,可能会破坏一些东西(例如,是否有人检查退出代码ls foo*以检查是否存在以"foo"开头的文件?).因此,理想情况下,我只想在小范围内启用它 - 理想情况下,一个文件名扩展.您可以使用它再次关闭shopt -u nullglob但当然只有在之前禁用它时:

old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
Run Code Online (Sandbox Code Playgroud)

让我觉得必须有一个更好的方法.明显的"把它放在子shell中"不起作用,因为变量赋值与子shell一起消失.除了等待Austin组导入ksh93语法之外,还有吗?

bash glob shopt

21
推荐指数
3
解决办法
7142
查看次数

使shopt改变本地功能

我正在尝试编写一个使用bash函数nocasematch而不更改选项的调用者设置.功能定义是:

is_hello_world() {
  shopt -s nocasematch
  [[ "$1" =~ "hello world" ]] 
}
Run Code Online (Sandbox Code Playgroud)

在我打电话之前:

$ shopt nocasematch
nocasematch     off
Run Code Online (Sandbox Code Playgroud)

叫它:

$ is_hello_world 'hello world' && echo Yes
Yes
$ is_hello_world 'Hello World' && echo Yes
Yes
Run Code Online (Sandbox Code Playgroud)

正如所料,但现在nocasematch调用者已经改变:

$ shopt nocasematch
nocasematch     on
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法使选项更改为函数本地?

我知道我可以检查返回值,shopt -q但这仍然意味着函数应该记住这一点并在退出之前重置它.

bash shopt

20
推荐指数
3
解决办法
2560
查看次数

shopt -s dirspell做什么?

我无法弄明白,我理解shopt -s cdspell但却无法找出shopt -s dirspell的作用.

Bash参考指南说:

dirspell

如果设置,如果最初提供的目录名不存在,Bash会在字完成期间尝试对目录名进行拼写更正.

我在几个目录上尝试了几次,但这不是行为.

我在i386-apple-darwin10.7.0上使用bash 4.2.10(2)

bash shopt

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

如果文件名glob没有匹配,如何匹配任何内容

我要循环匹配扩展名的文件jpgtxt.我用:

for file in myDir/*.{jpg,txt}
do
  echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

问题:如果目录根本不包含jpg文件,则循环将有一次带输出的迭代myDir/*.jpg.我认为*将被任意文件替换(如果不存在文件,则无法扩展).如何避免不必要的迭代?

bash glob shopt

12
推荐指数
1
解决办法
1567
查看次数

无法在Bash 4中启用globstar

我把以下内容写入我的.bashrc失败了

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

我正在尝试测试命令

ls **/*.c
Run Code Online (Sandbox Code Playgroud)

并通过比较它

ls */*/*.c
Run Code Online (Sandbox Code Playgroud)

如何在Bash 4中启用globstar?

bash bash4 shopt

8
推荐指数
1
解决办法
4772
查看次数

mac vscode bash: shopt: globstar: 无效的 shell 选项名称

在 Mac 上运行 vscode。我更新了 Mac bash 版本,正如您所看到的,内置的 vscode 终端显示的 bash 版本与 Mac 终端的版本相同。当我获取 .bash_profile 时,我invalid shell option name在 vscode 终端中收到错误。是什么原因造成的?

FWIW - 终端 > 集成 > Shell: Osx 设置为bin/bash,如果这不明显的话。而且,我的 SHELL 变量是相同的。

在此输入图像描述

macos bash visual-studio-code shopt

8
推荐指数
0
解决办法
6822
查看次数

标签 统计

shopt ×10

bash ×9

glob ×3

shell ×2

wildcard ×2

bash4 ×1

linux ×1

macos ×1

sh ×1

unix ×1

visual-studio-code ×1

zshrc ×1