我想使脚本/ bin / sh兼容。在某些时候,我正在使用十六进制变量的打印输出到其十进制值,但它会抛出此错误:
function createStore(reducer) {
var listeners = [];
function subscribe(listener) {
listeners.push(listener);
return function unsubscribe() {
var index = listeners.indexOf(listener)
listeners.splice(index, 1)
};
}
return {subscribe};
}
var myObject = createStore("foo");
console.log(myObject); // print an object with the subscribe method.
var myFunction = myObject.subscribe("bar");
console.log(myFunction); // print the unsubscribe function
console.log(createStore("foo").subscribe("bar"));
由/ bin / bash执行脚本时不存在该错误。我将其归结为以下问题:
sh: 1: arithmetic expression: expecting EOF: "16#c0"
这是为什么?如何在脚本中运行echo?
编辑: 子shell重定向到/ bin / dash
$ sh -c 'echo $((16#c0))'
sh: 1: arithmetic expression: expecting EOF: "16#c0"
$ sh -c "echo $((16#c0))"
192
答案 0 :(得分:4)
sh
(通常与dash
这样的POSIX shell simlink)不支持[base#]n
形式的算术求值,例如bash
受支持。
因此,您需要将0x
前缀与十六进制数字一起使用:
sh -c 'echo $((0xc0))'
或
sh -c 'printf "%d\n" 0xc0'
请注意,您始终需要使用单引号使当前shell不能解释双引号字符串的内容。
所以您尝试
sh -c "echo $((16#c0))"
似乎仅由于$((16#c0))
被bash
解释并且sh
执行的实际命令是echo 192
而起作用。