如何将句子传递给函数并使其表现得像一个参数。
示例:
function Test ()
{
echo $1
}
body="This the test"
Test $body
我想输出像这样=> “这个测试”因为空间它会打印我测试。我应该用什么特定的字符来使整个句子像一个参数。提前谢谢。
答案 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}
}