分页: 1 / 2

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

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

代码: 全选

#!/bin/sh

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

echo "$files" | while read line; do
	echo "$line"
done

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

发表于 : 2012-04-11 12:42
lilydjwg

代码: 全选

files='a
b
c'

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

发表于 : 2012-04-11 17:01
fanhe
lilydjwg 写了:

代码: 全选

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

应该说,有没有好办法把 here document 直接赋值到变量

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

发表于 : 2012-04-11 17:12
cao627
楼主的脚本什么意思 ?没理解

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

发表于 : 2012-04-11 17:28
cao627
files="a\nb\nc"

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

发表于 : 2012-04-11 18:19
lilydjwg
fanhe 写了:
lilydjwg 写了:

代码: 全选

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

应该说,有没有好办法把 here document 直接赋值到变量
为什么不好用?

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

发表于 : 2012-04-11 18:21
lilydjwg

代码: 全选

a=$(<<EOF
dkfjd
lsdkfj
)
这样如何?

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

发表于 : 2012-04-11 19:10
aerofox
fanhe 写了:
lilydjwg 写了:

代码: 全选

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

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

只要这两点要求满足了,你还要关心它是 here document 还是别的什么吗?

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

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

代码: 全选

files=`cat << EOF
here
EOF
`

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

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

代码: 全选

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

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

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

代码: 全选

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

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

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

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

而 c 都支持这样的了

代码: 全选

enum em {
  A,
  B,
};

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

发表于 : 2012-04-11 23:09
aerofox
fanhe 写了:道不同不相为谋,估计跟你没什么交集的了
只能对你表示道歉了!

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

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

而 c 都支持这样的了

代码: 全选

enum em {
  A,
  B,
};
JSON 太严格了,JavaScript 也这样。不过在非 IE 里最后一项后边也是可以加逗号的。

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

发表于 : 2012-04-12 9:04
eexpress
要Perl不
:em04
shell多蛋疼。

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

发表于 : 2012-04-12 9:25
link_01
人家来回复,你不采用不就完了,还什么道不同不相为谋

代码: 全选

#!/bin/sh

files='
a
b
c
'
for f in $files; do
    touch ./$f
done