Rob*_*Rob 12 command-line shell bash terminal
有没有办法在没有空格的情况下在 linux 中执行带参数的命令?
cat file.txt
Run Code Online (Sandbox Code Playgroud)
需要是:
cat(somereplacementforthiswhitespace)file.txt
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 19
要是有一个变量的值是一个空格就好了……或者更一般地说,包含一个空格。
cat${IFS}file.txt
Run Code Online (Sandbox Code Playgroud)
默认值为IFS空格、制表符、换行符。所有这些字符都是空格。如果您需要单个空间,可以使用${IFS%??}.
更准确地说,这样做的原因与分词的工作方式有关。关键是,它是在替换变量值后应用的。并且分词将值中的每个字符IFS作为一个分隔符,因此通过构造,只要IFS设置为非空值,${IFS}就将单词分隔开。如果IFS长度超过一个字符,则每个字符都是一个单词分隔符。作为空格的连续分隔符被视为单个分隔符,因此扩展的结果cat${IFS}file.txt是两个单词:cat和file.txt。非空白分隔符被单独处理,类似IFS=',.'; cat${IFS}file.txt,cat将接收两个参数:一个空参数和file.txt.
我找到了一种假设 shell 支持csh类似大括号扩展的方法,例如ksh, bashor yash -o brace-expand(zsh支持大括号扩展,但不像第一个参数那样与命令分组冲突):
{cat,file.txt}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您不必在参数中使用空格。