如何使函数像一个参数一样处理整个句子?

时间:2011-01-19 06:02:53

标签: bash

如何将句子传递给函数并使其表现得像一个参数。

示例:

function Test ()
{
  echo $1 
}
body="This the test"
Test $body

我想输出像这样=> “这个测试”因为空间它会打印我测试。我应该用什么特定的字符来使整个句子像一个参数。提前谢谢。

4 个答案:

答案 0 :(得分:6)

始终引用所有参数替换。

function Test() {
  echo "$1"   # needs quoting
}
body='This the test'  # double quotes would also work in this case
Test "$body"  # needs quoting as well

以下代码的更正和可读版本:

logger() {
    local message="$1"
    local mode="$2"
    case "$mode" in
        0)
            echo "$message"
            ;;
        1)
            echo "$message" > "$LOG_FILE_DIRECTORY_PATH$LOG_FILE_NAME"
            echo
            ;;
    esac
}

logmsg=' This is log message '
logger "$logmsg" 0

答案 1 :(得分:2)

在你的问题中引用参数将起作用。

$ function ztest () { echo $1; }
$ ztest "This is a test"
This is a test

所以,你不需要做任何事情。

编辑:从评论中,你有一个logger函数,并希望传递两个参数,一个字符串和一个“模式”。你可以这样做:

logger "This is a test" 0

或者,如果日志消息在变量中,

logger "$logmessage" 0

将变量置于“shell文件中并不是一个坏主意。

答案 2 :(得分:1)

使用包含所有位置参数的特殊参数并引用它。如果您在问题中显示输入参数,那么现有函数应该可以工作。

Test () { echo "$@"; }

答案 3 :(得分:0)

谢谢你们!完美地工作

logmsg=" This is log message "
logger "$logmsg" 0
logger ()
{
      # mode=$(echo ${@:${#@}} ) #last from parameters
     mode=${@: -1}
     [ $mode -eq 2 ]  && return
     B=`[ $mode -eq 0 ] && echo $1 `
     F=`echo $1 > $LOG_FILE_DIRECTORY_PATH$LOG_FILE_NAME `
     echo ${B:-$F}
}