Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Shell:为……写作。。。将参数转换为变量_Linux_Bash_Shell - Fatal编程技术网

Linux Shell:为……写作。。。将参数转换为变量

Linux Shell:为……写作。。。将参数转换为变量,linux,bash,shell,Linux,Bash,Shell,回声: for i in "a" "a b"; do echo $i; done 如何在$input中为I编写类似;执行并将中的“a”和“b”分配给输入?空格很重要。否则,$(echo…将起作用 编辑:问题不是关于文件,也不是关于某些输入,这些输入可以使用$@捕获,因为您使用的是bash,所以可以执行以下操作: a a b 由于您使用的是bash,因此可以执行以下操作: a a b 这只能通过命令行参数的“$@”构造进行移植 但是,如果不再需要实际的命令行参数,可以使用set替换其

回声:

for i in "a" "a b"; do
    echo $i;
done
如何在$input中为I编写类似
;执行
并将中的“a”和“b”分配给输入?空格很重要。否则,
$(echo…
将起作用


编辑:问题不是关于文件,也不是关于某些输入,这些输入可以使用
$@

捕获,因为您使用的是bash,所以可以执行以下操作:

a
a b

由于您使用的是bash,因此可以执行以下操作:

a
a b

这只能通过命令行参数的
“$@”
构造进行移植

但是,如果不再需要实际的命令行参数,可以使用
set
替换其内容:

input=("a" "a b")

for i in "${input[@]}"; do
  echo $i
done

您应该知道,仅仅问了这个问题就表明您已经接近了复杂性级别,您应该切换到限制较少的脚本语言(Perl和Python是常见的选择)。

这只能通过用于命令行参数的
“$@”
构造进行移植

但是,如果不再需要实际的命令行参数,可以使用
set
替换其内容:

input=("a" "a b")

for i in "${input[@]}"; do
  echo $i
done

您应该知道,仅仅问了这个问题就意味着您已经接近了复杂性级别,您应该切换到限制较少的脚本语言(Perl和Python是常见的选择)。

@Zack该问题被标记为
bash
。我们现在是否要求,除了正确之外,答案还必须符合POSIX,即使OP要求bash?您至少应该注意到它们是非标准的。但我经过深思熟虑后认为,永远不应该使用bashisms:如果在可移植shell中无法完成某些事情,正确的选择是使用Perl或Python。即使一个脚本除了OP之外永远不会被任何人使用,在他们控制的环境中,他们也不允许使用“bashisms”,尽管事实上“bashisms”比POSIX标准shell更短、更快、更不奇怪。问题不是“这项工作的最佳工具是什么?”问题是“你如何完成这项任务是bash?”如果OP想要在shell上讲授python的优点,他可以在无数讨论这个问题的网站上阅读。@Zack:那么让我们立即卸载bash。以及Python3和Python2.6或更高版本,或Perl5.8之后的任何版本。。。有一段时间是可移植的,也有一段时间是无所谓的,或者更强大、更新的功能更强大、更必要的。是的,这是真的,知道两者的区别(或者什么时候完全使用其他东西)很重要,但是关于Bash的每一个问题都不应该引发一种强迫,去兜售可移植性或者“使用其他东西”,除非它与这个问题相关。我不确定为什么会对可移植性有如此多的敌意。您可能会认为,尝试从Debian上的bash更改
/bin/sh
时遇到的麻烦足以证明可移植性确实很重要。在任何标记为
shell
或显式标记为
bash
的问题中提到它是很重要的,因为许多人甚至都不知道有问题。@Zack问题标记为
bash
。我们现在是否要求,除了正确之外,答案还必须符合POSIX,即使OP要求bash?您至少应该注意到它们是非标准的。但我经过深思熟虑后认为,永远不应该使用bashisms:如果在可移植shell中无法完成某些事情,正确的选择是使用Perl或Python。即使一个脚本除了OP之外永远不会被任何人使用,在他们控制的环境中,他们也不允许使用“bashisms”,尽管事实上“bashisms”比POSIX标准shell更短、更快、更不奇怪。问题不是“这项工作的最佳工具是什么?”问题是“你如何完成这项任务是bash?”如果OP想要在shell上讲授python的优点,他可以在无数讨论这个问题的网站上阅读。@Zack:那么让我们立即卸载bash。以及Python3和Python2.6或更高版本,或Perl5.8之后的任何版本。。。有一段时间是可移植的,也有一段时间是无所谓的,或者更强大、更新的功能更强大、更必要的。是的,这是真的,知道两者的区别(或者什么时候完全使用其他东西)很重要,但是关于Bash的每一个问题都不应该引发一种强迫,去兜售可移植性或者“使用其他东西”,除非它与这个问题相关。我不确定为什么会对可移植性有如此多的敌意。您可能会认为,尝试从Debian上的bash更改
/bin/sh
时遇到的麻烦足以证明可移植性确实很重要。在任何标记为
shell
或显式
bash
的问题中都必须提到它,因为许多人甚至没有意识到存在问题。shell函数有自己的命令行参数,因此它不会破坏原始参数
echoi(){对于“$@”中的i;do echoi$i;done;}echoi“a”“a b”
如果周围的上下文允许您使用shell函数,这是很好的,但有时这不是一个选项;我们不知道OP更大的情况是什么。请注意,这是一个非常常见的习惯用法,它是默认的。您可以在“$@中省略
,只需编写:
for i;do echo$i;done
shell函数有自己的命令行参数,这样就不会破坏原始参数。
echoi(){for i in“$@”;do echo$i;done;}echoi“a”a b“
如果周围的环境允许您使用shell函数,这很好,但有时这不是一个选项;我们不知道OP更大的情况是什么。请注意,这是一个非常常见的习惯用法,它是默认的。您可以在“$@
中省略
,只需为i;do e编写: