如何发送带参数且不带空格的命令?

如何发送带参数且不带空格的命令?

有没有办法在linux中执行带参数而不带空格的命令?

cat file.txt

需要是:

cat(somereplacementforthiswhitespace)file.txt

答案1

如果有一个变量的值为空格就好了……或者更一般地说,包含一个空格。

cat${IFS}file.txt

默认值为IFS空格、制表符、换行符。所有这些字符都是空格。如果您需要单个空间,则可以使用${IFS%??}.

更准确地说,它起作用的原因与分词的工作方式有关。重要的是,它是在替换变量的值之后应用的。而分词将 的值中的每个字符都视为IFS分隔符,因此通过构造,只要IFS将 设为非空值,${IFS}就可以分隔单词。如果IFS长度超过一个字符,则每个字符都是一个单词分隔符。连续的空白分隔符被视为单个分隔符,因此扩展的结果cat${IFS}file.txt是两个单词:catfile.txt。非空白分隔符被单独处理,像IFS=',.'; cat${IFS}file.txt,这样的东西cat会接收两个参数:一个空参数和file.txt

答案2

我找到了一种方法,假设 shell 支持csh类似大括号扩展,如ksh,bashyash -o brace-expandzsh支持大括号扩展,但不作为第一个参数,因为与命令分组冲突):

{cat,file.txt}

通过这种方式,您不必在参数中使用空格。

答案3

一种替代方法是将 IFS 的值与变量扩展一起使用:

$ echo Hello! > file.txt

$ IFS=:
$ a=cat:file.txt
$ $a
Hello!

答案4

OP是6年前,

时间过得很快。

但我将这篇文章发布给任何以前的答案对他不起作用的人,

像我个人一样cat${IFS%???}file.txt或者{cat,*}command not found: cat file.txtno matches found: ,cat,*

无论如何,我发现了一种对我有用的更简单的方法:

cat<index.js

或者例如:

cat<*

请不要以任何不道德的方式使用它,谢谢!

相关内容