当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 又一个变量替换问题
帖子发表于 : 2012-08-09 17:53 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
shell编程时,需要将文件名赋值给位置参数。于是set `ls`
但是悲剧的是他空格作为分隔符
代码:
$ls
a.txt b.ogg fire c.avi
$set `ls`
$echo $1
a.txt
$echo $2
b.ogg
$echo $3
fire
$echo $4
c.avi

怎么办?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:06 
头像

注册: 2010-06-16 1:05
帖子: 14668
地址: Tencent
系统: Mac OS X
送出感谢: 1
接收感谢: 153
代码:
$ IFS=''

[email protected] ~
$ ls
file1  file2

[email protected] ~
$ set `ls`

[email protected] ~

$ echo $1
file1
file2


_________________
twitter求fo:http://twitter.com/maplebeats
博客求踩:http://maplebeats.com


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:25 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
好吧,我好像没说清楚。 :em06
我要把目录下的每一个文件名都赋给一个位置参数
比如第一个文件file1 ---> $1
第二个文件file2 ---> $2
可是第三个文件(file\ 3)
名字有空格(file 和3间有空格)
于是实际上第三个文件名分给了两个位置参数
file --->$3
3 --->$4
我就是想“把目录下的每一个文件名都赋给一个位置参数”,
而且我不想先把file\ 3 改名为file3


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:35 
头像

注册: 2011-09-06 22:04
帖子: 1354
送出感谢: 12
接收感谢: 9
修改一下IFS到时再改回来。
ps:为什么要抓住位置参数不放。其实你可以使用数组.处理空格直接*
代码:
for files in *;do a=(${a[@]} "$files");echo $files;done
for i in $(seq 0 $(expr ${#a[@]} - 1));do echo $i ${a[$i]};done


_________________
  • The eternal law


最后由 naturalaw 编辑于 2012-08-09 19:00,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:40 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
代码:
ls -1
按行读。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:42 
头像

注册: 2010-06-16 1:05
帖子: 14668
地址: Tencent
系统: Mac OS X
送出感谢: 1
接收感谢: 153
代码:
$ ls
asfd a  file1  file2

[email protected] ~
$ IFS=$'\n'

[email protected] ~
$ set `ls -1`

[email protected] ~
$ echo $1
asfd a

[email protected] ~
$ echo $2
file1


_________________
twitter求fo:http://twitter.com/maplebeats
博客求踩:http://maplebeats.com


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:43 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
引用:
修改一下IFS到时再改回来。


如果这样的话,所有的文件名不挤在一个参数里了
其实我是想用for+shift+位置参数实现对每个文件的单独操作的


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:47 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
引用:
$ IFS=$'\n'

试了一下,是一个好方法呢
:em11


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 18:53 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
话说这个 $'\n‘ 是什么呀?


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 19:03 
头像

注册: 2011-09-06 22:04
帖子: 1354
送出感谢: 12
接收感谢: 9
引用:
$ IFS=$'\n'

其实是修改我之前说的。
四楼有新回复,不过不用修改$IFS


_________________
  • The eternal law


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 19:10 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
太棒了,方法看来有很多呀。
不过有一个小问题,IFS怎么没有手册页呀,是不重要吗?


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 又一个变量替换问题
帖子发表于 : 2012-08-09 19:20 
头像

注册: 2012-07-10 13:59
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
找到了,bash(1)里有一句
代码:
  IFS    内部字段分隔符    Internal    Field    Separator    用来在扩展之后进行分词,使用内部命令    read
              将行划分成词。默认值是 ``<space><tab><newline>''。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译