首页 > 解决方案 > Bash:在变量赋值中找不到命令并且文件名太长

问题描述

我在我的 bash 脚本中执行以下任务,但在不内联执行时不断收到奇怪的错误。

有效的原创

$DB_ENV = $(echo "$(cat .dbenv)" | tr '\n' ' ')
echo "CACERT=\"$(cat .cacert)\" $DB_ENV" yarn run knex migrate:up | bash -

新的没有

#!/bin/bash

$DB_ENV=$(echo $(cat .env) | tr '\n' ' ')
$CACERT="CACERT=\"$(cat .cacert)\""

if [[ $1 != 'up' && $1 != 'down' ]]; then
  echo Available subcommands are "up" and "down"
else
  echo "$CACERT $DB_ENV yarn run knex migrate:$1" | bash -
fi

出于某种原因,在我得到的第一个变量赋值行

migrate.sh: line 3: =NODE_ENV="production": command not found

第二个

migrate.sh: line 4: =CACERT="<file contents with newlines>": File name too long

对为什么会发生这种情况感到非常困惑,任何帮助都会很棒!

标签: bash

解决方案


你至少有两个错误:

  • $分配给变量时,您不应该在变量前面。
  • 不要在 assignments 的两侧放置空格=

例如,您的第一行应该是

DB_ENV=$(echo "$(cat .dbenv)" | tr '\n' ' ')

推荐阅读