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设置代码格式。请注意,在定义函数之前,不能调用函数。这可能应该被编辑到问题中,因为它不是一个真正的答案(但我不会把它标记为非答案)。这段代码仍然有很多问题,特别是在引用方面。我已编辑了我的答案,以包含更正的版本。