Bash将所有参数作为一个引用参数传递给另一个命令

时间:2016-05-05 15:33:03

标签: bash mingw

我通常这样做:

git commit -m "My hands are typing words!"

我开始'厌倦了,所以我做了这批:

@echo off
set var=%*
git commit -m "%var%"

其作用如下:

commit.bat blah blah blah

所以我可以删除-m和引号,但它会添加.bat。当我删除文件扩展名时,git Bash尝试将批处理解释为bash。所以我需要使用bash语法。没关系,我试过这个:

#!/usr/bin/bash
git commit -m "$@"

这不起作用,它将参数作为多个参数传递。它调用了这个:

git commit -m My hands are typing words!

我尝试添加更多引号(git commit -m ""$@""),没有效果。

那么如何将所有参数转换为可以在bash中传递给另一个命令的字符串?

1 个答案:

答案 0 :(得分:1)

您可以使用"$*"代替"$@" 此示例脚本应该解释它:

$ cat a.sh
#!/bin/bash
echo '$*:'
printf "%s\n" $*
echo
echo '"$*":'
printf "%s\n" "$*"
echo
echo '$@:'
printf "%s\n" $@
echo
echo '"$@":'
printf "%s\n" "$@"

$ ./a.sh a b "c    d"             e
$*:
a
b
c
d
e

"$*":
a b c    d e

$@:
a
b
c
d
e

"$@":
a
b
c    d
e

但是正确地说,你应该使用" $ 1" &安培;在传递给脚本之前引用您的消息字符串 在上面的例子中,您可以看到c&之间的空格。 d保留,但是" c d" &安培;失去了。