假设我在 bash 中有两个变量:
MULTILINE="I have
more than one line"
SINGLE_LINE="I only have one line
"
Run Code Online (Sandbox Code Playgroud)
我想检测变量何时实际包含多行文本,而忽略额外的尾随换行符。
所以这:
if [ some test on "$MULTILINE" ]; then echo 'yes'; else echo 'no'; fi
Run Code Online (Sandbox Code Playgroud)
会打印yes,这个:
if [ some test on "$SINGLE_LINE" ]; then echo 'yes'; else echo 'no'; fi
Run Code Online (Sandbox Code Playgroud)
会打印no。
对于我的具体情况,我认为我不需要担心引导空行,但知道如何做到这一点也无妨。
我怎样才能做到这一点?
$ echo "$MULTILINE" | wc -l 2 $ echo "$SINGLE_LINE" | wc -l 2 $ echo "$SINGLE_LINE" | sed -re '/^$/d' | wc -l 1 $ echo "$MULTILINE" | sed -re '/^$/d' | wc -l 2
有关
如何使用 sed 修剪/删除空格和空行的更多信息,请参阅/sf/ask/1149008731/
。
现在在引号内写下您的if expression ...使用 $( ... )以获取行数,并针对该数字进行测试:
if [ "$(echo "$MULTILINE" | sed -re '/^$/d' | wc -l)" -gt 1 ]; 然后 echo '不止一行'; 别的 echo '单行或无行'; 菲
我知道的最简单的解决方案是:
if (( $(grep -c . <<<"$MULTILINE") > 1 ))
Run Code Online (Sandbox Code Playgroud)
例如:
VAR="a
b"
if (( $(grep -c . <<<"$VAR") > 1 )); then
echo VAR has more than one line
else
echo VAR has at most one line
fi
Run Code Online (Sandbox Code Playgroud)
==>
VAR has more than one line
Run Code Online (Sandbox Code Playgroud)
以上忽略了所有空行:前导、尾随和内部。但是要注意,除非至少有两条非空行,否则不可能有内部空行,因此它的存在并不能改变修剪前后空行后是否有不止一行的问题。
| 归档时间: |
|
| 查看次数: |
8507 次 |
| 最近记录: |