是否存在像perls __DATA__
这样的bash?
我的意思是该功能,__DATA__
之后的代码将不会被执行。
答案 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;