shell脚本中的变量newcatalog =''$ newcatalog'| sed's /^-/\.//-/'`

时间:2013-03-10 17:27:02

标签: shell unix sed ksh

我正在编写shell脚本:

read newcatalog
newcatalog=`'print -- $newcatalog | sed 's/^-/\.\/-/'`
cd "$newcatalog"

newcatalog这是新目录的名称。目录名称应该支持*?和任何选择。

“ - n”“-y”和其他“ - ”在目录名称工作正常,但*不起作用,因为

print -- $newcatalog 

装置

print -- * | sed 's/^-/\.\/-/'

并向sed发送所有文件,但我只想发送*,如下所示:

print -- "*" | sed 's/^-/\.\/-/'

2 个答案:

答案 0 :(得分:1)

这一行错了:

newcatalog=`'print -- $newcatalog | sed 's/^-/\.\/-/'`

后面滴答声中的第一个单引号是一个入侵者,shell应该对你进行诊断。

newcatalog=`print -- $newcatalog | sed 's/^-/\.\/-/'`

(这会留下您实际执行的内容的问题。)一般情况下,您应该使用$(...)代替`...`

newcatalog=$(print -- $newcatalog | sed 's/^-/\.\/-/')

如果您试图避免*的shell元字符扩展,请将$newcatalog括在双引号中:

newcatalog=$(print -- "$newcatalog" | sed 's/^-/\.\/-/')

这不会完全保护你。如果有人输入:$(rm -f *)作为对read catalog的回复,即使使用双引号也会遇到严重问题。

答案 1 :(得分:0)

你的工作方式太难了。无需调用sed进行替换。只是做:

test "${newcatalog#-}" = "$newcatalog" || newcatalog="./$newcatalog"