如何在由npm运行的bash脚本中打印$1之前的$2?

3
我很困惑自定义的npm脚本和它们运行的bash脚本之间的关系。注意:这不是孤立的bash问题。我可以通过将“echo $2 $1”写入.sh文件并直接从终端运行来产生下面描述的预期行为。
"scripts": {"report":"echo $2 $1"}

如果我从终端运行它:npm run report "first" "second",因为在我的npm脚本中,我先调用了$2 BEFORE $1,我希望它输出: second first,但是由于某种原因它总是先打印$1first second。我尝试通过将我的参数缓存为变量,然后打印这些变量来解决这个问题。
"scripts": {"report": "(FIRST=$1 && SECOND=$2) && echo $SECOND $FIRST"}

但是输出结果相同:npm run report "first" "second" => first second

这是怎么回事?


我添加了可能的解决方法。看看是否适合你。 - Mikel
1个回答

6
以下bash文件对我来说运行良好:
echo $2 $1

运行命令:

bash file.sh 1 2

输出:

2 1

编辑*:

问题出在您尝试使用Node的方式上。似乎$X变量并未被Node填充。它只是将您的参数追加到其余命令中。

编辑*2:

解决方法

{
"scripts": {"report":"a(){ echo $2 $1; };a"}
}

太棒了,这正是问题所在。谢谢你。我不明白函数包装器如何帮助,但我可以确认它起作用! - Joseph Fraley
嘿,当你可以的时候,请将答案标记为已接受。这会提高声誉并从列表中删除问题等等... - Mikel
1
谢谢你的回答!这正是我在寻找的。我一直试图在$*之后强制添加一个参数,但该参数总是出现在第一位。非常感谢你的答案,因为它显然不是很明显。 - ztalbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接