sh/bash/dash/ksh/zsh等Shell脚本
-
Chanux
- 帖子: 45
- 注册时间: 2011-03-23 19:40
#1
帖子
由 Chanux » 2012-08-20 7:50
那个农历软件 lunar 的参数是要带空格的,比如:
代码: 全选
lunar 2012 08 10 09:00
而每次这么输一遍太麻烦,试过
后面加参数是不行的。
于是写了这个小脚本:
代码: 全选
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Yoftd=$(date +%Y) #Year of today
moftd=$(date +%m)
doftd=$(date +%d)
Hoftd=$(date +%H:%M)
thedate=("$Yoftd $moftd $doftd $Hoftd")
echo -e $thedate #test var
lunartd=lunar $thedate
变量 thedate 中已经有空格,但是 lunar 在读取的时候只读了第一个空格前的那个 2012,无法执行。
在 cal 中用这个方法加入参数也出现同样问题,而直接在终端输
也没问题。
请问该如何解决空格的问题?
或者有更好的写参数方法?求教。
-
mswwjick
- 帖子: 645
- 注册时间: 2009-01-28 21:42
#2
帖子
由 mswwjick » 2012-08-20 9:20
你可以试着把双引号去掉或把空格变成逗号等,
我是菜鸟,只是猜测,
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#3
帖子
由 枫叶饭团 » 2012-08-20 11:06
-
Chanux
- 帖子: 45
- 注册时间: 2011-03-23 19:40
#4
帖子
由 Chanux » 2012-08-20 21:53
还是不行啊,终端和脚本里都不行。
“行 9: 2012: 未找到命令“
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#5
帖子
由 枫叶饭团 » 2012-08-20 21:56
date的输出和参数不一致么?改一下输出吧
-
Chanux
- 帖子: 45
- 注册时间: 2011-03-23 19:40
#6
帖子
由 Chanux » 2012-08-20 22:01
枫叶饭团 写了:date的输出和参数不一致么?改一下输出吧
能再详细点吗?只学过一个多月C++,不会啊。
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#7
帖子
由 枫叶饭团 » 2012-08-20 22:05
我的意思是date输出和lunar要的参数不一样导致运行失败还是别的,如果是输出不一致,man date
-
cuihao
- 帖子: 4793
- 注册时间: 2008-07-24 11:33
- 来自: 郑州
-
联系:
#8
帖子
由 cuihao » 2012-08-20 22:18
因为变量解释成一个参数了吧。用eval解释一下就好了。
代码: 全选
cuihao@cuihao-arch ~ $ cal 8 2012
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
cuihao@cuihao-arch ~ $ cal '8 2012'
cal: illegal year value: use 1-9999: '8 2012'
cuihao@cuihao-arch ~ $ A='8 2012'
cuihao@cuihao-arch ~ $ cal $A
cal: illegal year value: use 1-9999: '8 2012'
cuihao@cuihao-arch ~ $ eval cal $A
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
-
funicorn
- 帖子: 1318
- 注册时间: 2005-09-13 4:56
- 系统: Ubuntu Jammy Jellyfi
#9
帖子
由 funicorn » 2012-08-21 0:02
lunar `date +Y%` `date +%m` `date+%d`
Chanux 写了:那个农历软件 lunar 的参数是要带空格的,比如:
代码: 全选
lunar 2012 08 10 09:00
而每次这么输一遍太麻烦,试过
后面加参数是不行的。
于是写了这个小脚本:
代码: 全选
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Yoftd=$(date +%Y) #Year of today
moftd=$(date +%m)
doftd=$(date +%d)
Hoftd=$(date +%H:%M)
thedate=("$Yoftd $moftd $doftd $Hoftd")
echo -e $thedate #test var
lunartd=lunar $thedate
变量 thedate 中已经有空格,但是 lunar 在读取的时候只读了第一个空格前的那个 2012,无法执行。
在 cal 中用这个方法加入参数也出现同样问题,而直接在终端输
也没问题。
请问该如何解决空格的问题?
或者有更好的写参数方法?求教。
-
aerofox
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
#10
帖子
由 aerofox » 2012-08-21 6:57
代码: 全选
lunar $( date +"%Y %m %d %H:%M" )
cal $( date +"%m %Y" )
-
tusooa
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
-
联系:
#11
帖子
由 tusooa » 2012-08-27 14:14
代码: 全选
● bash -c 'foo="8 2012" ; cal $foo'
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
● bash -c 'foo="2012 8 27" ; lunar --utf8 $foo'
Lunar Version 2.2 (October 28, 2001)
阳历: 2012年 8月27日 0时 星期一
阴历: 2012年 7月11日子时 生肖属龙
干支: 壬辰年 戊申月 庚申日 丙子时
用四柱神算推算之时辰八字: 壬辰年 戊申月 庚申日 丙子时
咋用咋正常。难道你用的Fish?印象里只有Fish才会自动把变量""起来.
-
tusooa
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
-
联系:
#12
帖子
由 tusooa » 2012-08-27 14:16
问题在
代码: 全选
lunartd=lunar $thedate
。
改成
代码: 全选
lunartd="$(lunar $thedate)"
-
tusooa
- 帖子: 6548
- 注册时间: 2008-10-31 22:12
- 系统: 践兔
-
联系:
#13
帖子
由 tusooa » 2012-08-27 14:17
cuihao 写了:因为变量解释成一个参数了吧。用eval解释一下就好了。
代码: 全选
cuihao@cuihao-arch ~ $ cal 8 2012
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
cuihao@cuihao-arch ~ $ cal '8 2012'
cal: illegal year value: use 1-9999: '8 2012'
cuihao@cuihao-arch ~ $ A='8 2012'
cuihao@cuihao-arch ~ $ cal $A
cal: illegal year value: use 1-9999: '8 2012'
cuihao@cuihao-arch ~ $ eval cal $A
八月 2012
日 一 二 三 四 五 六
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
● bash --version
GNU bash, 版本 4.2.37(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <
http://gnu.org/licenses/gpl.html>
这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.
可能是你的arch,bash太新了,新特性。