我想将"
内部发送的所有内容插入变量。
例如:
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
答案 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?