使用unix shell测试系统的字节顺序

aud*_*tic 2 c unix linux bash shell

我是shell脚本的新手(字面意思是我的第一天),我正在使用它为我的一个类创建可移植的C代码.我想定义一个CPP指令,它将定义我正在编译的系统的字节顺序(无论是Solaris,BSD,Linux,OSX等,都有一点困难.

我当前脚本的关键是以下行:

printf '\1' | od -dAn;
Run Code Online (Sandbox Code Playgroud)

1为小端和256大端输出(我已经在我的所有系统上测试过,它似乎可以完成这项工作).

现在,当我将它添加到以下脚本时,它似乎不能很好地播放.

CONFIG_HRD="config.h"
ENDIAN=printf '\1' | od -dAn;

touch $CONFIG_HRD
if $ENDIAN -eq \1; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误

./script.sh: line 2: \1: command not found
./script.sh: line 5: -eq: command not found
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我我做错了什么,我会很感激.谢谢

====== edit =======以下代码现在产生以下错误:

CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)

touch $CONFIG_HRD
if `$ENDIAN -eq 1`; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)

这个错误:

./script.sh: line 5: 1: command not found
Run Code Online (Sandbox Code Playgroud)

此代码导致以下错误:

CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)

touch $CONFIG_HRD
if `$ENDIAN=1`; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)

错误:

./script.sh: line 5: 1=1: command not found
Run Code Online (Sandbox Code Playgroud)

而这一个(括号而不是刻度)会导致另一个错误:

CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)

touch $CONFIG_HRD
if [$ENDIAN=1]; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)

错误:

./script.sh: line 5: [: missing `]'
Run Code Online (Sandbox Code Playgroud)

Pet*_*Mmm 6

尝试:

ENDIAN=$(printf '\1' | od -dAn)
Run Code Online (Sandbox Code Playgroud)

或(带回蜱)

ENDIAN=`printf '\1' | od -dAn`
Run Code Online (Sandbox Code Playgroud)

将结果存储到var.

取决于您正在使用语法的shell if.

if [ $ENDIAN -eq 1 ]; then
Run Code Online (Sandbox Code Playgroud)