我正在编写shell脚本:
read newcatalog
newcatalog=`'print -- $newcatalog | sed 's/^-/\.\/-/'`
cd "$newcatalog"
newcatalog这是新目录的名称。目录名称应该支持*?和任何选择。
“ - n”“-y”和其他“ - ”在目录名称工作正常,但*
不起作用,因为
print -- $newcatalog
装置
print -- * | sed 's/^-/\.\/-/'
并向sed
发送所有文件,但我只想发送*
,如下所示:
print -- "*" | sed 's/^-/\.\/-/'
答案 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"