我正在尝试将参数从bash脚本传递给可执行文件,其中一个包含空格。我一直在寻找如何解决这个问题,但我找不到正确的方法来解决这个问题。使用名为first
的脚本和名为second
的脚本的最小示例。
第一个脚本:
#!/bin/bash
# first script
ARGS="$@"
./second $ARGS
第二个脚本:
#!/bin/bash
# second script
echo "got $# arguments"
现在,如果我像这样运行它,我会得到以下结果:
$ ./first abc def
got 2 args
$ ./first "abc def"
got 2 args
$ ./first 'abc def'
got 2 args
我怎样才能这样做,第二个脚本也只收到一个参数?
答案 0 :(得分:4)
你不能使用中间变量。如果你引用它将总是传递1个参数,如果你不这样,你将丢失引号。
但是,如果不使用如下变量,则可以直接传递参数:
./second "$@"
$ ./first abc def
got 2 arguments
$ ./first "abc def"
got 1 arguments
或者,您可以使用数组来存储这样的参数:
#!/bin/bash
# first script
ARGS=("$@")
./second "${ARGS[@]}"
答案 1 :(得分:0)
IFS是你的朋友。
#!/bin/bash
# first script
ARGS="$@"
IFS=$(echo -en "\n\b")
./second $ARGS
IFS代表内部字段分隔符...