shell字符串坏替换
我知道这很愚蠢,但我是
shell的新手,我真的不知道这里发生了什么.以下是打算在zip文件被提取后获取目录名.因此,如果有效,结果将是这样的
$test.sh helloworld.zip helloworld 我们来看看test.sh: #! /bin/sh length=echo `expr index "$1" .zip` a=$1 echo $(a:0:length} 然而,我得到了糟糕的替代,这只是搞砸了.
如果你的shell是bash的最新版本,则
parameter expansion表示法应该有效.
在许多其他shell中,它不起作用,并且一个糟糕的替换错误就是shell说“你要求参数替换,但它对我没有意义”. 另外,给出脚本: #! /bin/sh length=echo `expr index "$1" .zip` a=$1 echo $(a:0:length} 对于通过运行expr索引“$1”.zip生成的命令,第二行导出带有值echo的变量长度.它没有指定长度.那应该只是: length=$(expr index "${1:?}" .zip) 如果未设置$1,则${1:?}表示法会生成错误(如果没有参数调用脚本). 最后一行应该是: echo ${a:0:$length} 请注意,如果$1持有filename.zip,则expr索引$1 .zip的输出为2,因为字母i出现在filename.zip中的索引2处.如果打算获取没有.zip扩展名的文件的基本名称,那么经典的方法是: base=$(basename $1 .zip) 更现代的方式是: base=${1%.zip} 它们是有区别的;如果名称是/path/to/filename.zip,则经典输出是文件名,现代输出是/ path / to / filename.您可以通过以下方式获得经典输出: base=${1%.zip} base=${base##*/} 或者,在经典版本中,您可以获得以下路径: base=$(dirname $1)/$(basename $1 .zip)`.) 如果文件名可以包含空格,则需要考虑使用双引号,尤其是在basename和dirname的调用中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |