强制转换为不允许在Shell脚本中的函数内插的字符串

时间:2018-06-27 12:24:21

标签: bash shell ksh

我正在寻找某种方法来在传递给外壳程序的字符串中打印星号。这些问题类似,但我无法针对我的情况使用任何解决方案:how do I echo an asterisks to an outputPrinting asterisk (*) in bash shellHow 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内进行插补?

2 个答案:

答案 0 :(得分:1)

根据arco444的建议,在set -o noglob中的sed之前使用function可以达到目的。

答案 1 :(得分:0)

您可以用""包围变量扩展,以免出现问题。

echo "$str" | ...