Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使函数将整个句子视为一个参数?_Bash - Fatal编程技术网

Bash 如何使函数将整个句子视为一个参数?

Bash 如何使函数将整个句子视为一个参数?,bash,Bash,我应该如何将一个句子传递给函数,并使它像一个参数一样工作 例如: function Test () { echo $1 } body="This the test" Test $body 我想要这样的输出=>“this the test”,因为它将只打印我的测试。为了使整个句子成为一个参数,我应该输入哪些特定字符。提前感谢。使用包含所有位置参数的特殊参数并引用它。如果您引用问题中显示的输入参数,那么您现有的函数应该已经工作了 Test () { echo "$@"; } 在你的问题中引

我应该如何将一个句子传递给函数,并使它像一个参数一样工作

例如:

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

我想要这样的输出=>“this the test”,因为它将只打印我的测试。为了使整个句子成为一个参数,我应该输入哪些特定字符。提前感谢。

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

Test () { echo "$@"; }

在你的问题中引用你的论点是有效的

$ function ztest () { echo $1; }
$ ztest "This is a test"
This is a test
所以,你不需要做其他事情了

编辑:从注释中,您有一个
logger
函数,希望向其传递两个参数,一个字符串和一个“mode”。您可以按如下方式执行此操作:

logger "This is a test" 0
或者,如果日志消息位于变量中

logger "$logmessage" 0

在shell脚本中,将变量放入“内部”很少是个坏主意。

始终引用所有参数替换

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

谢谢大家!!!干得很好

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}
}

谢谢,我的错误是我在“”中放入了param,比如“$1”,我刚刚删除了它,它workbody=“Test logger function”logger$body 0将只打印“Test”“@alper叹息。那是因为你没有引用论点。非常感谢你的帮助!!我现在花了两个小时来解释它。)@Philipp不支持echo如果它只是一句话下次如果你想快速得到有用的答案,我建议你把你的实际代码放在问题中。我已经更新了您的问题,以反映您在评论中要求的内容。@alper:请不要在评论中发布长代码,它们很难阅读。请将它们添加到您的问题中。请使用四个空格缩进、
{}
按钮或Ctrl-K设置代码格式。请注意,在定义函数之前,不能调用函数。这可能应该被编辑到问题中,因为它不是一个真正的答案(但我不会把它标记为非答案)。这段代码仍然有很多问题,特别是在引用方面。我已编辑了我的答案,以包含更正的版本。