有什么像perls __DATA__这样的bash吗?

时间:2010-08-13 13:25:35

标签: bash shell

是否存在像perls __DATA__这样的bash? 我的意思是该功能,__DATA__之后的代码将不会被执行。

3 个答案:

答案 0 :(得分:18)

Shell脚本在执行时逐行解析,因此您只需要确保执行永远不会到达您想要保护的数据。你可以这样做,例如:

# Some shell code...

exit

[data (possibly binary) goes here]

要从脚本中实际读取这些数据,您可以使用一些sed magic来提取仅包含__DATA__的第一行之后的所有内容,然后将该sed的输出存储在变量中。这是一个例子:

#!/bin/sh

data=$(sed '0,/^__DATA__$/d' "$0")
printf '%s\n' "$data"

exit

__DATA__
FOO BAR BAZ
LLAMA DUCK COW

如果将此脚本保存为test-data.sh并使其可执行,则可以运行它并获得以下输出:

$ ./test-data.sh
FOO BAR BAZ
LLAMA DUCK COW

答案 1 :(得分:3)

首先,perl的“__DATA__”pragma是一种在不指定文件的情况下向$ _提供输入的方法。 bash中没有等价物,因为它与$ _没有任何相似之处。但是,您可以通过其他方式直接在bash脚本中提供数据,例如显式设置变量,使用HERE文档等。

但是我不相信这是你想做的。看来你的某种块评论方法。是这样的吗?

答案 2 :(得分:0)

如果您想为脚本提供使用信息,但不想使用帮助文本混淆主要代码行,这是一种有用的技术。如果您想多次引用该用法,这也很棒。也就是说,来自我的shell脚本的片段:

//currently this.state.toggleButton == true;
let toggleButton = !this.state.toggleButton; // let toggleButton =false;
this.setState({ toggleButton }); // now state.toggleButton == false;