小编man*_*uck的帖子

请解释一下使用 IFS 进行这些参数扩展的行为?

我正在尝试弄清楚如何使用和${parameter%word}进行扩展。它首先尝试制作一个使用 Ghostscript 组合 pdf 的脚本,但我遇到了一些参数扩展的奇怪行为,现在我只是好奇为什么会发生这种行为。$@$*

基本上我试图从每个参数的末尾删除“.pdf”,然后用任意字符串将它们连接起来(我正在使用“-”进行测试),然后在结果的末尾添加“.pdf” 。例如,预期行为是test.sh a.pdf b.pdf c.pdf-> a-b-c.pdf。这是我正在运行的测试脚本:

IFS='-'

echo ${*%.pdf}.pdf
echo "${*%.pdf}.pdf"

a=${*%.pdf}.pdf
b="${*%.pdf}.pdf"
echo $a
echo $b
Run Code Online (Sandbox Code Playgroud)

如果我bash test.sh a.pdf b.pdf c.pdf,我得到:

a b c.pdf
a-b-c.pdf
a b c.pdf
a b c.pdf
Run Code Online (Sandbox Code Playgroud)

如果我zsh test.sh a.pdf b.pdf c.pdf,我得到:

a b c.pdf
a.pdf-b.pdf-c.pdf
a-b-c.pdf
a.pdf-b.pdf-c.pdf
Run Code Online (Sandbox Code Playgroud)

我知道 zsh 和 bash 是不同的,所以我不担心为什么它们给出不同的结果。然而,在每种情况下,构建字符串的 4 种方法中只有一种能够按预期工作(第二种用于 bash,第三种用于 zsh)。

为什么这些看似相似的构造字符串的尝试会产生如此不同的结果?任何见解都值得赞赏。谢谢!

bash zsh parameter shell-script quoting

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

$^@(美元插入符)在 shell 脚本中是什么意思?

我找到了参数扩展的参考资料,但没有一个解释其作用$^@。从上下文来看,我认为它用于扩展 例如~/$^@into ~/$1 ~/$2 ...,但我不确定,而且我找不到任何确认。除了解释之外,我很高兴知道这个扩展的名称,以及有关它的文档的链接(如果可能)。谢谢!

编辑:我被告知这可能是 zsh 特有的。如果有人有更多信息,请告诉我。

shell zsh shell-script

0
推荐指数
1
解决办法
1022
查看次数

标签 统计

shell-script ×2

zsh ×2

bash ×1

parameter ×1

quoting ×1

shell ×1