【问题标题】:An issue with quotes in a bash call of a function函数的 bash 调用中的引号问题
【发布时间】:2016-06-25 03:52:58
【问题描述】:

我写了一个小 bash 脚本,看起来像这样:

VAR1="test"
VAR2="test2"

letsDoSomeStuff() {
echo $1
echo $2
echo $3`
}



fswatch -0 . | xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff {} "$VAR1 $VAR2"'

我想做的是查找文件夹中的更改(通过样本),然后在 bash 脚本的函数中对更改的文件执行一些操作。不幸的是,我需要将 $VAR1 和 $VAR2 作为参数传递,因为它们不能“生存” xargs 调用。

bash 脚本运行良好。但是,$VAR1 和 $VAR2 未正确传递给函数。当我启动脚本时,它会为每个更改的文件输出:

   filename
empty line
empty line

这里有人可以帮我打这个电话吗?我想我弄乱了单引号和双引号,但找不到正确的方法。

提前致谢

诺伯特

【问题讨论】:

  • 将 $VAR1 和 $VAR2 放在单引号中会将它们变成一个标记,因此它们将被视为 letDoSomeStuff 的单个参数。

标签: bash xargs


【解决方案1】:

您需要将参数传递给您的函数调用:

fswatch -0 . | 
xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff "$1" "$2" "$3"' - {} "$VAR1" "$VAR2"

【讨论】:

  • 太棒了。有用!我不得不省略 - 不过。我的解决方案是 fswatch -0 。 | xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff "$1" "$2" "$3"' {} "$VAR1" "$VAR2"
  • 是的,您可以留下-,用于设置$0
猜你喜欢
  • 2015-09-14
  • 1970-01-01
  • 2021-10-23
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多