我知道**/*.ext
扩展到所有匹配的子目录中的所有文件*.ext
,但是什么是类似的扩展,包括当前目录中的所有这些文件?
我已将我的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
]]"
请帮我解决这个问题
有没有办法使用shell Globbing来识别嵌套目录?
所以,如果我有DIR/DIR1/DIR2/DIR3/dir4/dir5/..和我在所有这些文件,什么是相当于通配符匹配模式下的所有目录中的所有文件,类似 - 例如 - ls -R
在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函数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
但这仍然意味着函数应该记住这一点并在退出之前重置它.
我无法弄明白,我理解shopt -s cdspell但却无法找出shopt -s dirspell的作用.
Bash参考指南说:
dirspell
如果设置,如果最初提供的目录名不存在,Bash会在字完成期间尝试对目录名进行拼写更正.
我在几个目录上尝试了几次,但这不是行为.
我在i386-apple-darwin10.7.0上使用bash 4.2.10(2)
我要循环匹配扩展名的文件jpg
或txt
.我用:
for file in myDir/*.{jpg,txt}
do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
问题:如果目录根本不包含jpg文件,则循环将有一次带输出的迭代myDir/*.jpg
.我认为*
将被任意文件替换(如果不存在文件,则无法扩展).如何避免不必要的迭代?
我把以下内容写入我的.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?
在 Mac 上运行 vscode。我更新了 Mac bash 版本,正如您所看到的,内置的 vscode 终端显示的 bash 版本与 Mac 终端的版本相同。当我获取 .bash_profile 时,我invalid shell option name
在 vscode 终端中收到错误。是什么原因造成的?
FWIW - 终端 > 集成 > Shell: Osx 设置为bin/bash
,如果这不明显的话。而且,我的 SHELL 变量是相同的。