shell 脚本有没有好办法定义一块多行文本到一个变量?

sh/bash/dash/ksh/zsh等Shell脚本
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

shell 脚本有没有好办法定义一块多行文本到一个变量?

#1

帖子 fanhe » 2012-04-11 12:35

我现在只能这样做
其实就是定义一个文件列表,然后遍历做一些操作,不想涉及读任何文本文件
感觉上肯定还有其他更好的方法

代码: 全选

#!/bin/sh

files=`cat << EOF
a
b
c
EOF
`

echo "$files" | while read line; do
	echo "$line"
done
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#2

帖子 lilydjwg » 2012-04-11 12:42

代码: 全选

files='a
b
c'
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#3

帖子 fanhe » 2012-04-11 17:01

lilydjwg 写了:

代码: 全选

files='a
b
c'
这个不好用的

应该说,有没有好办法把 here document 直接赋值到变量
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#4

帖子 cao627 » 2012-04-11 17:12

楼主的脚本什么意思 ?没理解
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#5

帖子 cao627 » 2012-04-11 17:28

files="a\nb\nc"
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#6

帖子 lilydjwg » 2012-04-11 18:19

fanhe 写了:
lilydjwg 写了:

代码: 全选

files='a
b
c'
这个不好用的

应该说,有没有好办法把 here document 直接赋值到变量
为什么不好用?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#7

帖子 lilydjwg » 2012-04-11 18:21

代码: 全选

a=$(<<EOF
dkfjd
lsdkfj
)
这样如何?
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#8

帖子 aerofox » 2012-04-11 19:10

fanhe 写了:
lilydjwg 写了:

代码: 全选

files='a
b
c'
这个不好用的

应该说,有没有好办法把 here document 直接赋值到变量
我想,你应该关心的是两点:(1) 赋值后,变量的值是什么?(2) 变量的值来自何处?是脚本文件中?还是用户输入?还是另一个文件或者程序输出?

只要这两点要求满足了,你还要关心它是 here document 还是别的什么吗?
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#9

帖子 fanhe » 2012-04-11 22:37

这不是很简单的需求么
例如我想打包一些文件,就想一个 sh 脚本搞定,然后就是列出来一些文件,一个文件一行,要醒目易改
就好像 Makefile 里面定义一个文件列表到一个变量一样
看来还是这个方法够了

代码: 全选

files=`cat << EOF
here
EOF
`
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#10

帖子 aerofox » 2012-04-11 22:40

fanhe 写了:这不是很简单的需求么
例如我想打包一些文件,就想一个 sh 脚本搞定,然后就是列出来一些文件,一个文件一行,要醒目易改
就好像 Makefile 里面定义一个文件列表到一个变量一样
看来还是这个方法够了

代码: 全选

files=`cat << EOF
here
EOF
`
你这个办法结果上跟2楼的办法一样,而更冗长,看不出有什么好。
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#11

帖子 fanhe » 2012-04-11 22:57

aerofox 写了:
fanhe 写了:这不是很简单的需求么
例如我想打包一些文件,就想一个 sh 脚本搞定,然后就是列出来一些文件,一个文件一行,要醒目易改
就好像 Makefile 里面定义一个文件列表到一个变量一样
看来还是这个方法够了

代码: 全选

files=`cat << EOF
here
EOF
`
你这个办法结果上跟2楼的办法一样,而更冗长,看不出有什么好。
:em05

显然不一样,vim这样可以随便删除,尤其是第一行和最后一行的时候,直接一行删除,而按2楼那样,首尾行都要特殊处理

道不同不相为谋,估计跟你没什么交集的了

另外不得不吐槽json的格式,{} 里面的字段,最后的那行一定不能加逗号,这对有时候要加字段的时候是很蛋疼的事

而 c 都支持这样的了

代码: 全选

enum em {
  A,
  B,
};
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#12

帖子 aerofox » 2012-04-11 23:09

fanhe 写了:道不同不相为谋,估计跟你没什么交集的了
只能对你表示道歉了!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#13

帖子 lilydjwg » 2012-04-11 23:39

fanhe 写了:
另外不得不吐槽json的格式,{} 里面的字段,最后的那行一定不能加逗号,这对有时候要加字段的时候是很蛋疼的事

而 c 都支持这样的了

代码: 全选

enum em {
  A,
  B,
};
JSON 太严格了,JavaScript 也这样。不过在非 IE 里最后一项后边也是可以加逗号的。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#14

帖子 eexpress » 2012-04-12 9:04

要Perl不
:em04
shell多蛋疼。
● 鸣学
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: shell 脚本有没有好办法定义一块多行文本到一个变量?

#15

帖子 link_01 » 2012-04-12 9:25

人家来回复,你不采用不就完了,还什么道不同不相为谋

代码: 全选

#!/bin/sh

files='
a
b
c
'
for f in $files; do
    touch ./$f
done
笔记
-------------------------------------
http://blog.163.com/wqt_1101
回复