使用Sha256生成哈希赋值变量时出现“command not found”错误
问题原因与解决方法
错误原因
- 执行变量的行为逻辑误解:在bash环境中,直接输入
$User1等同于让shell把变量里的内容当作可执行命令去运行。但变量里存的是哈希值加-,shell会把开头的哈希值识别为命令名,去系统路径中查找对应命令,自然找不到,因此抛出"command not found"错误。要查看变量内容,应该用echo或printf这类输出命令,而非直接执行变量。 - 变量包含冗余内容:
sha256sum的默认输出格式是[哈希值] [输入源],由于你用管道传递输入,输入源会显示为-,所以赋值后的变量里不仅有目标哈希值,还附带了后面的-冗余内容。
正确的哈希值赋值与使用方法
1. 仅提取纯净哈希值到变量
需要过滤掉sha256sum输出里的 -部分,以下几种方法均可实现:
- 用
cut截取第一列:User1=$(echo User1 | sha256sum | cut -d' ' -f1) - 用
awk提取第一个字段:User1=$(echo User1 | sha256sum | awk '{print $1}') - 用bash内置参数替换去除末尾冗余:
User1=$(echo User1 | sha256sum) User1=${User1% -} # 从变量末尾删除匹配的" -"字符串
2. 正确查看变量内容
赋值完成后,通过输出命令查看变量值,而非直接执行变量:
echo "$User1" # 或用更可靠的printf(避免特殊字符解析问题) printf "%s\n" "$User1"
内容的提问来源于stack exchange,提问作者DanielJ
相关产品推荐
相关产品推荐

