在EOF中的bash脚本无法将参数传递给函数。

26 浏览
0 Comments

在EOF中的bash脚本无法将参数传递给函数。

我有以下的bash脚本,它在一个名为some_file.sh的文件中运行,内容如下:

sudo -i -u $USER bash << EOF
func(){
    echo $1
}
func 'Test message for channel'
EOF

尽管函数被调用时带有一个参数,但这个参数在函数的参数中返回为空,我做错了什么?

调用它时我使用:

bash some_file.sh

0
0 Comments

引用<< 'EOF'来防止在函数定义之前展开函数中的$

sudo -i -u $USER bash << 'EOF'
func(){
    echo $1
}
func 'Test message for channel'
EOF

请参阅Bash手册中的Here Documents。此行为适用于所有Bourne shell衍生物——Bash、POSIX shell、ksh等。

问题原因:由于在<< 'EOF'中使用了单引号,导致函数中的参数无法展开。

解决方法:去掉<< 'EOF'中的单引号即可。这样就可以在函数中正常展开参数了。

0