Bash-如何在后台进程描述中显示变量值而不是名称?

Bash-如何在后台进程描述中显示变量值而不是名称?,bash,Bash,我有一个运行如下流程的函数: 你好{ 年份=2001年 龙润流程$year } 当我在后台执行此功能时,运行进程的描述如下: [1] 龙润流程$year ,我错过了$year的信息。在for循环中运行hello函数时,它会给我带来一些麻烦,我无法判断哪个年份进程仍在运行,哪个年份进程未运行 是否有方法将$year in process显示为其值而不是名称?如果没有其他方法,可以在调用命令之前使用eval展开值,而不是在以下过程中: $arg=2001 $sleep$arg& [1] 408861

我有一个运行如下流程的函数:

你好{ 年份=2001年 龙润流程$year } 当我在后台执行此功能时,运行进程的描述如下:

[1] 龙润流程$year ,我错过了$year的信息。在for循环中运行hello函数时,它会给我带来一些麻烦,我无法判断哪个年份进程仍在运行,哪个年份进程未运行


是否有方法将$year in process显示为其值而不是名称?

如果没有其他方法,可以在调用命令之前使用eval展开值,而不是在以下过程中:

$arg=2001 $sleep$arg& [1] 4088610 $eval睡眠${arg@Q} & [2] 4088612 $jobs [1] -运行sleep$arg& [2] +跑步睡眠'2001'&
${arg@Q}如果参数从简单数字变为任意文本,shell将转义变量arg以确保eval不会脆弱或不安全。

如果没有其他内容,则可以在调用命令之前使用eval展开值,而不是在以下过程中:

$arg=2001 $sleep$arg& [1] 4088610 $eval睡眠${arg@Q} & [2] 4088612 $jobs [1] -运行sleep$arg& [2] +跑步睡眠'2001'&
${arg@Q}如果参数从简单数字变为任意文本,shell将转义变量arg以确保eval不会脆弱或不安全。

。通常,我会把作业控制问题推到,因为作业控制是一种交互式功能,默认情况下在脚本中是关闭的,前面提到的姐妹站点包含用户与UNIX工具的交互,这些工具不在SO的范围内,因此通常更相关;但是,编写源于交互式shell的代码仍然是在编写代码,因此可以说这与软件开发有足够的联系,可以在这里讨论。感谢您的批准。。我在这里经常看到tag Bash,所以在打开它时,我更熟悉它。老实说,我不认为有必要在不同的地方分割问题,因为最终,从用户体验来看,这只是一个标签差异这里有什么帮助吗?您在longRunProcess中尝试过$1吗?是的,$1仍然被打印为$1,而不是它的值@JGFMKInteresting。通常,我会把作业控制问题推到,因为作业控制是一种交互式功能,默认情况下在脚本中是关闭的,前面提到的姐妹站点包含用户与UNIX工具的交互,这些工具不在SO的范围内,因此通常更相关;但是,编写源于交互式shell的代码仍然是在编写代码,因此可以说这与软件开发有足够的联系,可以在这里讨论。感谢您的批准。。我在这里经常看到tag Bash,所以在打开它时,我更熟悉它。老实说,我不认为有必要在不同的地方分割问题,因为最终,从用户体验来看,这只是一个标签差异这里有什么可以帮助你的吗?你在longRunProcess中试过$1吗?是的,$1仍然被打印为$1而不是它的价值@JGFMKIt说bash-${arg@Q}bas替换我检查了我的bash版本是4.2.46这是bash 4.4中的一个新特性。对于旧版本,您可以使用eval sleep$printf“%q”$arg&表示什么?第2行和第4行是一样的吗?根据你的答案,我找到了一种更简洁的方法:a=5;评估睡眠回声$a&。这也行得通。它说bash-${arg@Q}bas替换我检查了我的bash版本是4.2.46这是bash 4.4中的一个新特性。对于旧版本,您可以使用eval sleep$printf“%q”$arg&表示什么?第2行和第4行是一样的吗?根据你的答案,我找到了一种更简洁的方法:a=5;评估睡眠回声$a&。这也行得通。