免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9221 | 回复: 15
打印 上一主题 下一主题

如何获取带引号的参数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-03 12:02 |只看该作者 |倒序浏览
脚本test如下:
echo "[$0] [$*][$@]"

$ ./test 1 2 3 "4 5" 6 "78"
结果:
[./test] [1 2 3 4 5 6 78][1 2 3 4 5 6 78]

如何在脚本中获取命令行完整参数:1 2 3 "4 5" 6 "78"

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
2 [报告]
发表于 2011-03-03 12:14 |只看该作者
./test 1 2 3 "\"4 5\"" 6 "\"78\""

论坛徽章:
0
3 [报告]
发表于 2011-03-03 13:52 |只看该作者
回复 2# ziyunfei


    谢谢,虽然显示没有问题,但这种方式也影响了参数本身,还是有点问题:

脚本test:
for i in $1
do
        echo "[$i]"

done

运行:

./test  "1 2 3" 结果:
[1]
[2]
[3]

./test "\"1 2 3\"" 结果:
["1]
[2]
[3"]

论坛徽章:
0
4 [报告]
发表于 2011-03-03 14:09 |只看该作者
笨办法!
while [ $# -ge 1 ]
do
        coupara=`echo $1|awk '{print NF}'`
        if [ $coupara -gt 1 ]
        then
                parastr=`printf "%s%s " "$parastr" "\"$1\""`
        else
                parastr=`printf "%s%s " "$parastr" $1`
        fi
        shift 1
done
echo "$parastr"

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-03-03 14:10 |只看该作者
回复 3# ruifox


    try:
  1. echo $1 |while read line
  2. do
  3.         echo "[$line]"

  4. done
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-03-03 14:13 |只看该作者
执行  ./test "\"1 2 3\""    你要什么结果才是不影响参数本身?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2011-03-03 14:36 |只看该作者
脚本test如下:
echo "[$0] [$*][$@]"

$ ./test 1 2 3 "4 5" 6 "78"
结果:
[./test] [1 2 3 4 5 6 7 ...
ruifox 发表于 2011-03-03 12:02



shell 十三問?
9) $@ 與 $* 差在哪?
http://bbs.chinaunix.net/viewthr ... p;page=7#pid1628522

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2011-03-03 14:38 |只看该作者
回复 1# ruifox
  1. cat script
  2. #!/bin/bash

  3. loop=0

  4. while [ $# -ne 0 ] # while there are still arguments

  5. do

  6.      echo $1|while read line
  7.         do
  8.              echo "[$line]"

  9.          done

  10.      shift

  11. done



  12. ./script 1 2 3 "4 5" 6 "78"
  13. [1]
  14. [2]
  15. [3]
  16. [4 5]
  17. [6]
  18. [78]
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-03-03 16:15 |只看该作者
本帖最后由 ruifox 于 2011-03-03 16:26 编辑

回复 6# seeLnd


    不好意思,忘了解释一下最终的目的!主要是为了编写一个脚本,需要使用数据库,只有informix用户才有权使用,所以在脚本执行时先判断是否为root用户,

   id_=`/usr/bin/id|awk '{print $1}'|awk -F'[(=]' '{print $2}'`
    if [ $id_ = 0 ]
    then
        su informix -c "$0 $*"
        exit $?
    fi
    ....

   在实际使用过程中有些参数时是需要加引号的(如:"1 2",表示一个字符串参数),但通过$*则变为多个参数(如:"1 2"变为1 2两个参数)
  但"\"1 2\""这种用法所带入的字符串参数将在前后各多了一个双引号,如果id_不等于0时,则参数与要求不符

论坛徽章:
0
10 [报告]
发表于 2011-03-03 16:37 |只看该作者
USER_NAME=$(whoami)
if [[ "$USER_NAME" = root ]]
then
       ...
else
      ...
fi
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP