一些编译器(尤其是 C 或 C++ 编译器)会发出以下警告:
No new line at end of file
Run Code Online (Sandbox Code Playgroud)
我以为这只是 C 程序员的问题,但 github 在提交视图中显示了一条消息:
\ No newline at end of file
Run Code Online (Sandbox Code Playgroud)
对于 PHP 文件。
我理解这个线程中解释的预处理器的事情,但这与 PHP 有什么关系?它是同一include()件事还是与\r\nvs\n主题有关?
在文件末尾换行有什么意义?
VAR=a,b,c,d
# VAR=$(echo $VAR|tr -d '\n')
echo "[$VAR]"
readarray -td, ARR<<< "$VAR"
declare -p ARR
Run Code Online (Sandbox Code Playgroud)
结果:
[a,b,c,d]
declare -a ARR=([0]="a" [1]="b" [2]="c" [3]=$'d\n')
Run Code Online (Sandbox Code Playgroud)
我怎么能告诉readarray不要添加最后的换行符\n?最新的$符号是什么意思?
给定任意两个绝对 Unix 路径规范1,可以将每个规范分解为最长公共前缀和特定后缀的串联。例如,
/abc/bcd/cdf -> /abc/bcd + cdf
/abc/bcd/chi/hij -> /abc/bcd + chi/hij
Run Code Online (Sandbox Code Playgroud)
是否有 Unix 实用程序(或多个实用程序)来计算这种分解?(我添加了“或实用程序”,以防有用于计算最长公共前缀和计算相对路径的单独实用程序。)
(我意识到编写此类实用程序并不是非常困难,但我尽量优先使用或多或少标准的工具而不是定制的工具。)
1我写了“路径规范”而不是“路径”来回避给定文件系统、链接等中的(路径的)存在等问题。
创建一个空目录,然后运行以下代码:
find /empty_directory -mindepth 1 -maxdepth 1 -type d |
while read dir;
do
echo "Simple find: $dir"
done
printf '%s\n' '-----' # Safer than echo -----
while read dir;
do
echo "HereDoc find: $dir"
done <<< "$(find /empty_directory -mindepth 1 -maxdepth 1 -type d)"
Run Code Online (Sandbox Code Playgroud)
这是输出:
-----
HereDoc find:
Run Code Online (Sandbox Code Playgroud)
换句话说,第二个循环使用空变量执行一次。
为什么会这样呢?当没有发现循环的目录时,如何使第二个循环行为正确并且不运行?