gpt4 book ai didi

string - shell 字符串错误替换

转载 作者:行者123 更新时间:2023-12-04 06:42:23 25 4
gpt4 key购买 nike

我是 shell 编程的新手。我打算在解压缩 zip 文件后获取目录名称。它的打印语句是

$test.sh helloworld.zip
helloworld

我们来看一下test.sh:
#! /bin/sh
length=echo `expr index "$1" .zip`
a=$1
echo $(a:0:length}

但是我从编译器那里得到了错误替换错误。

当我提到“shell”时。我只是在谈论 shell,因为我不知道 bash 或其他人之间的区别。我只是使用 Ubuntu 10.04 并使用终端。 (我正在使用 bash。)

最佳答案

如果您的 shell 是 bash 的最新版本, 那 parameter expansion符号应该有效。

在许多其他 shell 中,它不起作用,还有一个 bad substitution错误是 shell 程序说“您要求进行参数替换,但对我来说没有意义”的方式。

另外,给定脚本:

#! /bin/sh
length=echo `expr index "$1" .zip`
a=$1
echo $(a:0:length}

第二行导出变量 length带值 echo对于通过运行 expr index "$1" .zip 生成的命令.它没有分配给 length .那应该只是:
length=$(expr index "${1:?}" .zip)

哪里 ${1:?}如果 $1,表示法会产生错误未设置(如果不带参数调用脚本)。

最后一行应该是:
echo ${a:0:$length}

请注意,如果 $1持有 filename.zipexpr index $1 .zip的输出是 2,因为字母 i出现在 filename.zip 中的索引 2 处.如果目的是获取没有 .zip 的文件的基本名称扩展,那么经典的做法是:
base=$(basename $1 .zip)

更现代的方式是:
base=${1%.zip}

它们是有区别的;如果名称是 /path/to/filename.zip ,经典输出为 filename而现代的则是 /path/to/filename .您可以通过以下方式获得经典输出:
base=${1%.zip}
base=${base##*/}

或者,在经典版本中,您可以通过以下方式获取路径:
base=$(dirname $1)/$(basename $1 .zip)`.)

如果文件名可以包含空格,则需要考虑使用双引号,尤其是在 basename 的调用中和 dirname .

关于string - shell 字符串错误替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12831808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com