如何使用带空格的参数在Bash中调用应用程序

如何使用带空格的参数在Bash中调用应用程序,bash,ubuntu,Bash,Ubuntu,我有一个bash文件,它被传递给包含空格的参数。bash文件如下所示: #!/bin/bash another_app "$1" 但是,它不是像我认为应该的那样将参数作为单个参数处理,而是根据空格的多少将其作为多个参数处理。例如,如果我调用bash文件,如下所示: my_app "A Number Of Words" 然后,“另一个应用程序”将传递4个不同的参数,而不是一个。如何将单个参数传递给第二个应用程序?使用“$@”调用第二个应用程序: 其他人是正确的,这在某种程度上取决于第二个应用程

我有一个bash文件,它被传递给包含空格的参数。bash文件如下所示:

#!/bin/bash
another_app "$1"
但是,它不是像我认为应该的那样将参数作为单个参数处理,而是根据空格的多少将其作为多个参数处理。例如,如果我调用bash文件,如下所示:

my_app "A Number Of Words"

然后,“另一个应用程序”将传递4个不同的参数,而不是一个。如何将单个参数传递给第二个应用程序?

使用
“$@”
调用第二个应用程序:


其他人是正确的,这在某种程度上取决于第二个应用程序如何处理args。您还可以稍微控制参数的传递方式。您可以通过引用或使用@steve提到的“$@”变量来实现这一点

例如app1.sh

#!/bin/bash 

echo "Argument with no quotes"
./another_app.sh $1

echo "Argument with quotes"
./another_app.sh "$1" 

echo "Argument with \$@"
./another_app.sh "$@"
还有另一个app.sh #!/bin/bash

echo "Inside $0" 
echo "Number of args passed to me: $#"

for X in "${@}"
do 
  echo $X 
done
echo "Exiting $0" 

如果
myapp
是两行脚本,那么
myu-app“许多单词”
将使用单个参数调用另一个应用程序
另一个_应用程序
对这个参数做了什么,大家都在猜测。这也是我的想法,但我严重怀疑“另一个_应用程序”在这方面有问题——它是一个非常流行的命令行工具。好吧,这段代码不会将第一个参数拆分成单独的单词。你(和@Steve Vinoski)是对的。“$1”工作正常-原来问题出在传递给第二个应用程序的另一个参数中,没有正确转义。谢谢你的帮助!
echo "Inside $0" 
echo "Number of args passed to me: $#"

for X in "${@}"
do 
  echo $X 
done
echo "Exiting $0"