首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如果参数等于该字符串,则定义一个类似于该字符串的变量

如果参数等于该字符串,则定义一个类似于该字符串的变量
EN

Stack Overflow用户
提问于 2012-03-16 04:31:29
回答 3查看 488.1K关注 0票数 276

我正在做一些bash脚本,现在我得到了一个名为source的变量和一个名为samples的数组,如下所示:

代码语言:javascript
复制
source='country'
samples=(US Canada Mexico...)

因为我想要扩展源的数量(每个源都有自己的样本),所以我尝试添加一些参数来实现这一点。我试过这个:

代码语言:javascript
复制
source=""
samples=("")
if [ $1="country" ]; then
   source="country"
   samples="US Canada Mexico..."
else
   echo "try again"
fi

但是当我运行我的脚本source countries.sh country时,它不工作。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-16 04:48:59

不要忘记空格:

代码语言:javascript
复制
source=""
samples=("")
if [ $1 = "country" ]; then
   source="country"
   samples="US Canada Mexico..."
else
  echo "try again"
fi
票数 483
EN

Stack Overflow用户

发布于 2013-08-14 06:27:30

在bash中,可以使用"=“或"==”运算符进行字符串比较。重要的因素是括号内的间距。正确的方法是在括号中包含空格,在运算符中包含空格。在某些情况下,不同的组合可以工作;然而,下面是一个通用的例子。

代码语言:javascript
复制
if [ "$1" == "something" ]; then     ## GOOD

if [ "$1" = "something" ]; then      ## GOOD

if [ "$1"="something" ]; then        ## BAD (operator spacing)

if ["$1" == "something"]; then       ## BAD (bracket spacing)

另外,请注意,与单括号相比,双括号的处理方式略有不同。

代码语言:javascript
复制
if [[ $a == z* ]]; then   # True if $a starts with a "z" (pattern matching).
if [[ $a == "z*" ]]; then # True if $a is equal to z* (literal matching).

if [ $a == z* ]; then     # File globbing and word splitting take place.
if [ "$a" == "z*" ]; then # True if $a is equal to z* (literal matching).

我希望这对你有帮助!

票数 224
EN

Stack Overflow用户

发布于 2012-03-16 04:40:17

您似乎希望将命令行参数解析到您的bash脚本中。最近我自己也在搜索这个。我偶然发现了以下内容,我认为它们将有助于您解析参数:

http://rsalveti.wordpress.com/2007/04/03/bash-parsing-arguments-with-getopts/

我将下面的代码片段添加为tl;dr

代码语言:javascript
复制
#using : after a switch variable means it requires some input (ie, t: requires something after t to validate while h requires nothing.
while getopts “ht:r:p:v” OPTION
do
     case $OPTION in
         h)
             usage
             exit 1
             ;;
         t)
             TEST=$OPTARG
             ;;
         r)
             SERVER=$OPTARG
             ;;
         p)
             PASSWD=$OPTARG
             ;;
         v)
             VERBOSE=1
             ;;
         ?)
             usage
             exit
             ;;
     esac
done

if [[ -z $TEST ]] || [[ -z $SERVER ]] || [[ -z $PASSWD ]]
then
     usage
     exit 1
fi

./script.sh -t测试-r服务器-p密码-v

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9727695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档