如何将报价内的所有输入都输入变量

时间:2019-06-20 14:26:50

标签: string bash getopts

我想将"内部发送的所有内容插入变量。

例如:

check.sh

#!/bin/bash
./b.sh -a "$@"

b.sh

#!/bin/bash

while getopts ":a:b:c:" opt; do
  case ${opt} in
        a) A="$OPTARG"
;;
        b) B="$OPTARG"
;;
        c) C="$OPTARG"
;;
        :) echo "bla"
exit 1
;;
esac
done

echo "a: $A, b: $B, c: $C"

运行#1: 所需结果:

user@host $  ./check.sh -a asd -b "asd|asd -x y" -c asd
a: -a asd -b "asd|asd -x y" -c asd, b: ,c: 

实际结果:

user@host $  ./check.sh -a asd -b "asd|asd -x y" -c asd
a: -a, b: , c:

运行#2: 所需结果:

user@host $ ./check_params.sh -a asd -b asd|asd -c asd
a: -a asd -b asd|asd -c asd, b: ,c:

实际结果:

user@host $ ./check_params.sh -a asd -b asd|asd -c asd
-bash: asd: command not found

1 个答案:

答案 0 :(得分:0)

使用$*代替$@

check.sh:

#!/bin/bash
./b.sh -a "$*"

"$*"是用$IFS变量连接在一起的所有位置参数的字符串表示形式。而$@扩展为单独的参数。

还要注意,在第二个示例中,您需要使用引号管道字符串:

./check.sh -a asd -b 'asd|asd' -c asd

Check: What is the difference between “$@” and “$*” in Bash?