我是shell编程新手。我打算解压压缩文件后得到目录名。它的打印语句是
$test.sh helloworld.zip
helloworld
让我们看看test.sh:
#! /bin/sh
length=echo `expr index "$1" .zip`
a=$1
echo $(a:0:length}
但是我从编译器得到了Bad Substitution错误。
当我提到“shell”的时候,我只是在说shell,因为我不知道bash和其他shell的区别,我只是在用Ubuntu 10.04和终端。(我使用bash)
3条答案
按热度按时间9rbhqvlz1#
如果您的shell是
bash
的最新版本,那么这个参数扩展符号应该可以工作。在许多其他shell中,它将不起作用,
bad substitution
错误是shell说“您要求参数替换,但它对我没有意义”的方式。另外,考虑到脚本:
第二行为运行
expr index "$1" .zip
生成的命令导出值为echo
的变量length
。它不分配给length
。这应该是:其中,如果未设置
$1
(如果调用脚本时没有参数),则${1:?}
表示法会生成错误。最后一行应该是:
请注意,如果
$1
包含filename.zip
,则expr index $1 .zip
的输出为2,因为字母i
出现在filename.zip
中的索引2处。如果目的是获取没有.zip
扩展名的文件的基本名称,那么经典的方法是:更现代的方法是:
有区别;如果名称为
/path/to/filename.zip
,则经典输出为filename
,现代输出为/path/to/filename
。您可以通过以下命令获得经典输出:或者,在经典版本中,您可以通过以下方式获得路径:
如果文件名可以包含空格,则需要考虑使用双引号,特别是在调用
basename
和dirname
时。ygya80vv2#
尝试使用bash运行它。
bash test.sh helloworld.zip
“试着把第一行改成**#!/bin/bash**”作为评论-由- @shellter回答
6l7fqoea3#
在
bash
中尝试:根据您的需要进行调整。