#!/usr/bin/env bash
awk '
BEGIN {
arr[A]=1;
arr[B]=1;
arr[C]=1;
arr[E]=1;
arr[J]=8;
arr[Q]=10;
print arr[J]
}'
Run Code Online (Sandbox Code Playgroud)
上面的命令输出 的最新设置值arr['subscript']
,在这种情况下10
,是arr[Q]
之前的值,print
而不是8
的值arr[J]
。
此外,就像在上面的脚本中一样,我不想一次为arr['A'], arr['B'], arr['C'] and arr['E']
具有相同值的值分配1
一行,而是将一组下标作为参数之一并将公共值作为另一个参数传递给处理给他们赋值的逻辑。
我不明白的命令输出存在差异,如下所述:
INPUT="$@"
echo "$INPUT ${#INPUT} ${#INPUT[@]} ${#@}"
# outputs: a b c 5 1 3
arr=(a b c)
echo "$arr ${#arr} ${#arr[@]}"
# outputs: a 1 3
Run Code Online (Sandbox Code Playgroud)
我用./my_script.sh a b c
.
我知道这echo "$arr"
是取消引用$arr
第一个元素,然后打印a
. 同时对于$INPUT
它打印的命令a b c
。
对于命令${#INPUT}
和${#INPUT[@]}
原因分别是输出5
和1
。它不应该类似于命令的输出${#arr}
和${#arr[@]}
吗?
我有以下文件,所有这些文件都包含缩小的 JavaScipt 代码。每个文件都以注释结尾:
文件夹结构
|--static
|--js
|--1.1001bbaf.chunk.js
|--runtime~main.229c360f.js
|--main.57f2973b.chunk.js
Run Code Online (Sandbox Code Playgroud)
1.1001bbaf.chunk.js
(window.webpackJsonp=window.webpackJsonp||[]).push .....
//# sourceMappingURL=1.1001bbaf.chunk.js.map
Run Code Online (Sandbox Code Playgroud)
运行时~main.229c360f.js
!function(e){function r(r){for .....
//# sourceMappingURL=runtime~main.229c360f.js.map
Run Code Online (Sandbox Code Playgroud)
main.57f2973b.chunk.js
(window.webpackJsonp=window.webpackJsonp||[]).push .....
//# sourceMappingURL=main.57f2973b.chunk.js.map
Run Code Online (Sandbox Code Playgroud)
我的要求是将所有文件的内容刷新到单个文件中main.js
,以便附加内容而不是覆盖内容。
我尝试了以下解决方案:
cat static/js/*.js >> main.js
效果很好,但它在第一个文件的末尾附加了第二个文件的内容,以注释结尾。像这样的东西:
//#sourceMappingURL=1.1001bbaf.chunk.js.map(window.webpackJsonp=window.webpackJsonp||[]).push .....
现在整行都是 vim 文本编辑器中的注释,从这一行开始的所有内容都是 Atom 文本编辑器中的注释。
我的 Vim 文本编辑器的默认行为是,如果我o
在命令模式下按下并且最后一行是注释//...
,则新行以//
.
我不知道如何处理以注释行结尾的文件。我可以想到这样的事情:从新行开始追加下一个文件的内容或删除最后一行注释。
限制是只能使用bash
。