问题标签 [parameter-expansion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 脚本在执行时运行,但在获取时失败
原标题:脚本来源时间接参数替换中断(zsh)
zsh 5.7.1 (x86_64-apple-darwin19.0)
GNU bash,版本 4.4.20(1)-release (x86_64-pc-linux-gnu)
我正在 Mac 上开发一个 shell 脚本,我试图让它在 bash 和 zsh 之间保持可移植性,所以数组索引是一个考虑因素。我知道我可以将 KSH_ARRAYS 设置为从 0 开始索引,但我决定在操作系统中查询正在使用的 shell 并相应地设置开始索引,这导致了下面描述的问题。
使用间接扩展是有道理的(无论如何对我来说!),这就是导致问题的原因。考虑脚本indirect.sh:
在同一目录中从命令行运行时,它工作正常:
当我获取脚本时出现问题:
我不明白为什么采购脚本会改变参数扩展的行为。
这是预期的行为吗?如果是这样,如果有人可以解释它并希望提供解决方法,我将不胜感激。
zsh - zsh 参数扩展,过滤掉与模式匹配的数组元素
什么 zsh 参数扩展可以过滤掉与模式匹配的数组元素(就像什么grep -v
)?
string - "${line//END}" != "$line" - 它有什么作用
因此,我对包含 PEM 证书(其中许多)的文件进行 API 调用的结果如下:
在@user2856925 的帮助下回答这里(https://serverfault.com/a/718751)我开始工作我的脚本应该得到每个证书的到期日期。
现在虽然这东西做了我想要的,但理解它会很完美,所以我可以在其他脚本中使用它。
那么让我们来回答问题。"${line//END}" 是做什么的?// 在字符串上是什么,它正在检查 END 字是否包含在变量 line 中??!
我运行 bash -x 并看到变量 txt 被添加到下一行,直到找到 END CERTIFICATE 然后运行 printf 行。所以在这条线之后txt="$txt$line\n"
它又回到了那个时候??这将解释txt=""
清空变量的行,以便下一个证书出现。
但是为什么我们需要 else txt="$txt$line\n"
??
该脚本还会忽略证书之间的所有空格 2 个或更多或根本没有,或者如果证书格式正确,它就可以工作,这很好,我没有抱怨,但它是怎么做的?
bash - 参数扩展默认 ":=" vs "=" vs ":-" vs "-"
我已经看到在 Bourne 派生的 shell 的参数扩展中使用默认值的几种不同方法::=
、=
和. 我想知道它们有何不同。手册说,并且处理空值与和不同。但据我所知,==和== 。这是真的?:-
-
-
=
:-
:=
:=
:-
=
-
linux - 使用 bash 创建具有增量版本的新目录
我需要以增量方式生成新目录。以下是文件夹结构:-
我想从变量中的现有目录中获取最新版本,即last=1.0.1,将值0.0.1添加到last以获得下一个版本,即next=1.0.2。这样我就可以使用mkdir manifests/$next创建一个新目录,如下所示:-
我可以使用以下命令获取具有最新版本的目录名称:-
如何将0.0.1添加到变量中,以便next=1.0.2如下所示:-
zsh - 在 zsh 别名中替换文件扩展名
我正在尝试创建一个别名,cwebp
以便从 zsh 运行,它将输入图像文件转换为同名的输出图像文件,但文件扩展名为 .webp:
然后在 zsh
返回一个名为的转换文件.webp
我如何才能返回一个名为的文件hello.webp
?
任何帮助表示赞赏!
bash - ${i%.*} 在这种情况下做了什么?
我正在学习一些关于在 linux 终端中运行 bash 脚本的知识,特别是在转换音频视频文件的上下文中。
我在这里遇到了这个命令,这正是我想要的。但是,我想更好地理解它:
for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done
现在,这显然是一个for-loop
,我得到了第一个*
通配符。我明白了do
。但我不太明白的是${i%.*}
。具体来说,该%.*
位在输出位置有什么作用?为什么不${i}.mp4
改用?
bash - bash 脚本不像 shell
这是我的脚本:
它aabcaa
在我期望的时候输出bcaa
。
当我在 bash shell 上尝试相同的命令时(bash
从 zsh shell 获取命令),一切都按我的意愿工作。bash --version
我用和检查了版本/bin/bash --version
。显然,这两个命令输出相同的东西。脚本的意外行为在 zsh shell 和 bash shell 中是相同的。
有什么问题?
bash - 如何在 bash 脚本中将日期名称转换为小写?
我通常使用以下 bash 脚本将文件重命名为星期几(例如,星期一、星期二、星期三、星期四、星期五、星期六和星期日):
有没有办法将一天的所有名称都变成小写,例如星期一、星期二、星期三、星期四、星期五、星期六和星期日?谢谢大家。
bash - 这个 bash 参数扩展语法是什么?
我以前从未见过这种+x}
语法,也找不到有关它的文档。它有什么作用?