有没有办法在linux中执行带参数而不带空格的命令?
cat file.txt
需要是:
cat(somereplacementforthiswhitespace)file.txt
答案1
如果有一个变量的值为空格就好了……或者更一般地说,包含一个空格。
cat${IFS}file.txt
默认值为IFS
空格、制表符、换行符。所有这些字符都是空格。如果您需要单个空间,则可以使用${IFS%??}
.
更准确地说,它起作用的原因与分词的工作方式有关。重要的是,它是在替换变量的值之后应用的。而分词将 的值中的每个字符都视为IFS
分隔符,因此通过构造,只要IFS
将 设为非空值,${IFS}
就可以分隔单词。如果IFS
长度超过一个字符,则每个字符都是一个单词分隔符。连续的空白分隔符被视为单个分隔符,因此扩展的结果cat${IFS}file.txt
是两个单词:cat
和file.txt
。非空白分隔符被单独处理,像IFS=',.'; cat${IFS}file.txt
,这样的东西cat
会接收两个参数:一个空参数和file.txt
。
答案2
我找到了一种方法,假设 shell 支持csh
类似大括号扩展,如ksh
,bash
或yash -o brace-expand
(zsh
支持大括号扩展,但不作为第一个参数,因为与命令分组冲突):
{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.txt
和no matches found: ,cat,*
无论如何,我发现了一种对我有用的更简单的方法:
cat<index.js
或者例如:
cat<*
请不要以任何不道德的方式使用它,谢谢!