当seq数是变量时,我在Bash中遇到内置序列(即:不使用seq)的问题.例如,这工作并打印我1 2 3:
for i in {1..3};do echo $i;done
Run Code Online (Sandbox Code Playgroud)
但是这个 :
bash-3.2 $ a = 3;对于i在{1 .. $ a};做回声$ i;完成
失败并仅打印我{1..3}
这适用于ZSH,我知道我有一个替代方案来制作一个反制品,但想知道这是一个bug还是大括号扩展功能!
我已经了解到,在Bash中运行命令时,在命令执行之前完成文件名扩展.但是在尝试下面的命令时(使用-x选项):
touch foo=3 # Create a file with name "foo=3"
+ touch foo=3
declare foo=?
+ declare 'foo=?'
alias foo=*
+ alias 'foo=*'
Run Code Online (Sandbox Code Playgroud)
我得不到我的期望,因为foo =?并且foo =*未扩展为文件名"foo = 3":
declare -p | grep 'foo=' # => foo='?'
alias | grep 'foo=' # => alias foo='*'
Run Code Online (Sandbox Code Playgroud)
但是如果我运行另一个类似cd的内置函数或者接受赋值作为自己编写的参数的函数,就像show_rhs() { echo "${1%=*}='${1#*=}'"; }我得到的那样(foo =?和foo =*被展开).
cd foo=? # => foo=3: Not a directory
show_rhs() foo=* # => foo='3'
Run Code Online (Sandbox Code Playgroud)
我可以在这里看到的唯一区别是申报和别名是内置插件和接受工作任务作为参数.根据-x选项的输出,似乎添加了一对引用以在文件名扩展之前包含赋值.
但是如果文件名扩展在命令执行之前运行而不管命令是什么,那么传入declare和alias的参数应该是foo = 3而不是foo =?和foo =*由于存在文件"foo = 3".
那么Bash在文件名扩展之前根据命令做一些特殊的事情(可能引用通配符?)到"a = b"类似的参数?
(我的环境:CentOS …
我在一个用 C 编写的项目中使用 doxygen 作为文档。在那个项目中有很多重复的代码。由于我仅限于使用纯 C(不允许使用 C++),因此我使用宏来减少源文件中的重复。在由宏生成的代码中,我希望包含函数和类型声明(它们遵循一种模式,实际的宏很容易编写)。我真的希望这些生成的函数和类型出现在 doxygen 文档中,因为它们对库 API 至关重要。但是,我正在努力使 doxygen 正确扩展宏
Doxygen 并不总是扩展宏。例如,在同一行代码中,相同的类似函数的宏被调用两次,第一次展开但第二次没有展开。
我觉得解释这个问题的最好方法是展示一个 MRE(你可以从这里下载)
考虑以下文件 singlefile.h
/** @file singlefile.h
@defgroup singlefile singlefile.h: Single File Example
Test file
@{
*/
#ifndef _SINGLE_FILE_H
#define _SINGLE_FILE_H
#define _CCONCAT(X, Y) X ## Y
#define _CONCAT(X, Y) _CCONCAT(X, Y)
#define CONCAT(X, Y) _CONCAT(X, Y)
#define MY_TYPE_FULL(MY_TYPE) CONCAT(My, MY_TYPE)
#define MY_TYPEDEF_H(MY_TYPE) typedef struct MY_TYPE_FULL(MY_TYPE) MY_TYPE_FULL(MY_TYPE);
MY_TYPEDEF_H(Account)
#endif
/** @} */
Run Code Online (Sandbox Code Playgroud)
宏调用的预期输出MY_TYPEDEF_H(Account)是以下类型声明
typedef struct MyAccount MyAccount;
Run Code Online (Sandbox Code Playgroud)
这在 …
是否存在执行位扩展/复制的高效(快速)算法?
例如,将8位值中的每个位扩展3(创建24位值):
1101 0101 => 11111100 01110001 11000111
Run Code Online (Sandbox Code Playgroud)
已经提出的强力方法是创建查找表.将来,扩展值可能需要变化.也就是说,在上面的例子中,我们正在扩展3,但可能需要扩展一些其他值.这将需要多个查找表,如果可能,我想避免.
从扩展文件中读取mp3文件
我有名称的创建和扩展文件
"main.1.com.example.app.obb"
其中包含和音频文件名"about_eng.mp3"
现在问题我编写了以下代码来阅读和播放mp3文件
private final static String EXP_PATH = "/Android/obb/";
static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {
String packageName = ctx.getPackageName();
Vector<String> ret = new Vector<String>();
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// Build the full path to the app's expansion files
File root = Environment.getExternalStorageDirectory();
File expPath = new File(root.toString() + EXP_PATH + packageName);
// Check that expansion file path exists
if (expPath.exists()) {
if ( mainVersion > 0 ) {
String strMainPath = expPath + File.separator + …Run Code Online (Sandbox Code Playgroud) 在Scala 2.8语言规范,§6.26.5EtaExpansion中,它声明我们需要一个最大子表达式,但是,没有找到这个的定义.有人可以澄清一下吗?
其中一个遗留系统升级到bash4,其大部分脚本停止工作.我已经将它缩小到如何在a中扩展花括号<(cmdA ...|cmdB ... file{1,2}|cmdZ ...).
为了更好地说明差异:
之前(bash 3.2.25):
[root@host1:~]$ bash -version|head -1
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
[root@host1:~]$ cat <(echo sort file{1,2})
sort file1
sort file2
[root@host1:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
[root@host1:~]$
Run Code Online (Sandbox Code Playgroud)
之后(bash 4.1.2):
[root@host2:~]$ bash --version|head -1
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
[root@host2:~]$ cat <(echo sort file{1,2})
sort file1 file2
[root@host2:~]$ join <(sed 's/\r//g;s/^[^:]*://' file{1,2}|LANG=C sort)
join: missing operand after `/dev/fd/63'
Try `join --help' for more information.
[root@host2:~]$
Run Code Online (Sandbox Code Playgroud)
它是否为bash4做出了"硬编码"(并且预期?)的更改?或者这个扩展的行为是由一些bash级别的设置(比如set -B/ set +B)控制的,可以切换回old/legacy/bash3模式吗?我宁愿改变一些shell范围的开关(而不是重写一堆脚本).
如果这个(bash3)"功能"在错误修复或改进期间被切断 …
shopt -s failglob;
ls -l /non-existent/*; echo A;
echo B
Run Code Online (Sandbox Code Playgroud)
只打印“B”(以及“不匹配”错误)。
http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion
表示导致扩展失败的命令没有被执行;但并不是说该行的其余部分被忽略。如何限制扩展失败仅影响实际命令?
这是在 Gentoo-Linux 上的 GNU bash 版本 4.2.45(1)-release (i586-pc-linux-gnu) 下。
嗨,大家好,
我需要在 Get() 方法[EnableQuery(MaxExpansionDepth=3)] 中进行设置以限制 OData 查询中的扩展深度。
我试图在 Get() 方法中设置此属性,但它不起作用。
你能给我一个建议吗?
按照:https : //github.com/OData/odata.net
非常感谢