Bash脚本和shell本身不给予我相同的输出[重复]

3hvapo4f  于 6个月前  发布在  Shell
关注(0)|答案(1)|浏览(81)

此问题在此处已有答案

Difference between sh and Bash(11个回答)
echo -e acts differently when run in a script by root on ubuntu(3个答案)
27天前关闭
这是我想运行的一系列命令

vlanIdDec=69
vlanIdBin=$(awk -v vlanIdDec=$vlanIdDec 'BEGIN {s = sprintf("%*s", vlanIdDec, ""); gsub(".", "0", s); printf s"1"}')
vlanIdHex=$(echo $vlanIdBin | perl -lpe '$_=pack"B*",$_' | xxd -i | tr -d ', \n' | sed 's/0x/\\x/g' | sed 's/\\x0a//g')
vlanIdBase64=$(echo -e -n $vlanIdHex | base64 | tr -d '\n') && echo $vlanIdBase64

字符串
当我在命令行中使用export一个接一个地运行上面的命令时,我在最后得到的值是AAAAAAAAAAAE

#!/bin/sh

vlanIdDec=69

# Convert decimal VLAN ID to binary
vlanIdBin=$(awk -v vlanIdDec=$vlanIdDec 'BEGIN {s = sprintf("%*s", vlanIdDec, ""); gsub(".", "0", s); printf s"1"}')

# Convert binary VLAN ID to hexadecimal
vlanIdHex=$(echo $vlanIdBin | perl -lpe '$_=pack"B*",$_' | xxd -i | tr -d ', \n' | sed 's/0x/\\x/g' | sed 's/\\x0a//g')

# Convert hexadecimal VLAN ID to base64
vlanIdBase64=$(echo -e -n $vlanIdHex | base64 | tr -d '\n')

echo "Decimal VLAN ID: $vlanIdDec"
echo "Binary VLAN ID: $vlanIdBin"
echo "Hexadecimal VLAN ID: $vlanIdHex"
echo "Base64 VLAN ID: $vlanIdBase64"


这是我得到的错误输出。

Decimal VLAN ID: 69
Binary VLAN ID: 0000000000000000000000000000000000000000000000000000000000000000000001
Hexadecimal VLAN ID: \x00\x00\x00\x00\x00\x00\x00\x00\x04
Base64 VLAN ID: LWUgLW4gXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA0Cg==


有什么问题吗?我试着把命令放在一个函数里,但是没有用。另一件事,我也在Go程序中实现了这一系列命令,但是我没有得到同样的输出。这里有什么问题吗?

4ktjp1zp

4ktjp1zp1#

这是因为这条线:

#!/bin/sh

字符串
代之以

#!/bin/bash


您将得到与交互式bash会话相同的输出。
为什么会这样?
因为sh中的echo(可能是dash或类似的东西)不支持-e

相关问题