我正在寻找某种方法来在传递给外壳程序的字符串中打印星号。这些问题类似,但我无法针对我的情况使用任何解决方案:how do I echo an asterisks to an output,Printing asterisk (*) in bash shell,How do I escape the wildcard/asterisk character in bash?。
我有以下脚本:
#!/bin/bash
# First function
function()
{
typeset -r str=$1
typeset -i N=$2
typeset -i i=0
while [[ $i -lt $N ]];
do
echo $str| sed "s/<token>/$i/g"
(( i+=1 ))
done
}
# 'main' function
doStuff()
{
foo.pl << EOF
some words $(function "input string with asterisk * and some <token> after it" 123)
some more words
EOF
[ $? -eq 0 ] || logerror "Function 'doStuff' failed."
}
doStuff
exit 0
运行skript时,星号替换为echo *
的结果。
为了解决这个问题,我尝试声明ASTERISK='*'
并将其替换,并简单地将函数调用更改为$(function "input string with asterisk "'*'" and some <token> after it" 123)
,但窍门都没有。
我怀疑问题是echo
内的function
语句,但不确定如何解决,所以我的问题是是否有任何方法可以将str
转换为function
是否不允许在function
内进行插补?
答案 0 :(得分:1)
根据arco444的建议,在set -o noglob
中的sed
之前使用function
可以达到目的。
答案 1 :(得分:0)
您可以用""
包围变量扩展,以免出现问题。
echo "$str" | ...